September 16, 2026
A Photo Upload Field, a Stolen Metadata Token, and Three Weeks of Silence
Turning each week of my cloud security internship into a concept, the hands-on work behind it, and the incident that shows why it matters
By Victorayangunna
3 min read
An app let users submit a profile photo by pasting a URL, and the server would fetch whatever it was given. No validation beyond "is this a URL?" Nobody had considered that "fetch any URL" doesn't just mean pulling a photo off the internet. It can also mean pointing the server at itself.
One submission wasn't a photo link at all. It was the address of the server's own internal metadata service, the internal endpoint that hands out temporary security credentials for whatever role that server runs as. The app fetched it exactly like any other URL, and handed those credentials straight back to the attacker. From there, the attacker logged in with real, valid credentials. No password to guess, no MFA to bypass, no alarm. A login that looked exactly like the company's own systems operating normally.
The framework built to map exactly this kind of chain, step by step, is MITRE ATT&CK.
The Concept
ATT&CK is a structured map of how attackers actually move, organized into four levels:
- Tactics are the why: the attacker's goal at a given stage, like Initial Access, Persistence, or Lateral Movement.
- Techniques are the how: the specific method used to reach that goal, such as phishing or exploiting a public-facing application.
- Sub-techniques narrow that further into a specific variant, like a spearphishing attachment versus a spearphishing link.
- Procedures are the exact implementation: the specific tool, malware, or command a real attacker or group actually used.
The framework splits into separate matrices for different environments: Enterprise (Windows, Linux, and so on), Mobile (iOS/Android), and ICS (industrial control systems).
In practice, security teams use it for a handful of distinct things: mapping detection rules to specific techniques to check monitoring coverage, structuring red-team exercises around real adversary behavior instead of generic scans, categorizing known threat actor groups by the techniques they historically use, and running gap analysis to identify which techniques your current tools simply can't see.
The way I'd apply this to my own environment isn't as an attack plan, it's as an honest checklist. For each stage of a real attack chain, I'd ask:
- What's exposed to the outside world? Any public API, login page, or upload form?
- Would my input validation actually stop the relevant Initial Access techniques, or has it just never been tested?
- What's that exposed thing connected to, and if someone got through it, what else could they reach?
- What could a stolen identity actually do?
- If these credentials leaked right now, how much damage is possible, and would I even notice?
- Does my logging catch this, and can the same role that touches sensitive data also switch the logs off?
Walking through an environment stage by stage this way turns a vague sense of security into a specific, checkable list.
The Build: Mapping a Real Incident, Not Just Describing One
I picked a real incident and mapped its complete attack chain using the MITRE ATT&CK Navigator, plotting every stage against its actual tactic and technique rather than writing a narrative summary. The value of doing this concretely, instead of describing an incident in prose, is that it forces a decision at every step: exactly which tactic does this action serve, and exactly which technique or sub-technique describes it. That's a different, more precise exercise than just knowing generally that "an attacker got in and stole some data."
The Incident: The Chain, Mapped
The photo-upload breach above was one of the incidents I mapped, and walking it through ATT&CK's structure makes the shape of the failure much clearer than a narrative alone.
Initial Access came through exploiting a public-facing application: the unrestricted URL-fetch feature. From there, the attacker used that same request capability to reach the instance metadata service, a Credential Access technique that hands over valid, temporary credentials without any authentication bypass at all. Because those credentials were real, the subsequent login required no privilege escalation and tripped no anomaly detection. It looked exactly like the application's own legitimate traffic.
From there came Discovery and Collection: the attacker explored what the stolen identity could reach, found an S3 bucket holding years of photos and a full customer database, and exfiltrated it.
The final step was Defense Impairment: the same role also had permission to modify logging configuration, so the attacker disabled the activity log for roughly 90 minutes while working, then quietly re-enabled it. The breach went unnoticed for three weeks.
What Stands Out
Mapped this way, what's striking is how ordinary each individual decision looked in isolation. Accepting a URL for a photo upload seems reasonable. Giving a server's IAM role broad access seems convenient during development. Not locking down who can touch logging settings seems like a minor detail. None of these, on its own, reads as a glaring mistake.
The actual failure is what should have happened between them. Defense in depth means that even if one layer fails, the unrestricted URL fetch, the next layer should stop the damage from spreading. The server shouldn't have been able to reach its own metadata service in the first place, and even if it could, the role behind it shouldn't have had access to nearly everything it touched. Instead, every layer behind the first one gave way just as easily, and the attacker simply kept walking forward with no resistance at all.
This lesson is about seeing the whole chain at once, because a breach is rarely one dramatic failure. It's usually several ordinary, individually forgivable decisions, each one assuming the next layer would catch what it missed.