惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
云风的 BLOG
云风的 BLOG
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Register - Security
The Register - Security
L
LangChain Blog
A
About on SuperTechFans
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
博客园 - 司徒正美
Scott Helme
Scott Helme
K
Kaspersky official blog
Cyberwarzone
Cyberwarzone
T
Tenable Blog
腾讯CDC
Recorded Future
Recorded Future
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
G
GRAHAM CLULEY
Security Latest
Security Latest
S
Securelist
D
Darknet – Hacking Tools, Hacker News & Cyber Security
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
V
Vulnerabilities – Threatpost
雷峰网
雷峰网
T
The Exploit Database - CXSecurity.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
T
The Blog of Author Tim Ferriss
D
Docker
S
Security Affairs
F
Full Disclosure
Know Your Adversary
Know Your Adversary
N
News and Events Feed by Topic
N
News and Events Feed by Topic
T
Tor Project blog
Hugging Face - Blog
Hugging Face - Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Microsoft Security Blog
Microsoft Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
Recent Announcements
Recent Announcements
博客园_首页
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Security @ Cisco Blogs

Wiz Blog | RSS feed

Meet Wiz for M365: Bringing SaaS into the Security Graph Bringing Security Visibility to Vercel with Wiz Axios NPM Distribution Compromised in Supply Chain Attack Tracking TeamPCP: Investigating Post-Compromise Attacks Seen in the Wild The Wiz Blue Agent, now Generally Available Beyond the Badge: What Achieving Microsoft’s Certified Software Designation Means for Your Cloud Security Introducing the Green Agent: AI-Powered Remediation for the Cloud Three’s a Crowd: TeamPCP trojanizes LiteLLM in Continuation of Campaign KICS GitHub Action Compromised: TeamPCP Strikes Again in Supply Chain Attack Introducing the Wiz Red Agent- AI-Powered Attacker Introducing Wiz AI Application Protection Platform (AI-APP) Introducing Wiz Agents & Workflows: Security at the Speed of AI AI Runtime Threat Detection: From Input to Real-World Impact Trivy Compromised: Everything You Need to Know about the Latest Supply Chain Attack It’s Official: Wiz Joins Google Understanding and Reducing AI Risk in Modern Applications Introducing Wiz Tenant Manager: Multi-Tenant Management for Federated Organizations The Agile FedRAMP Playbook, Part 4: Reactive Risk Management through Enriched Incident Response Wiz Achieves CPSTIC Certification in Spain Seeing AI Clearly: Building Visibility Across Modern AI Applications The Agile FedRAMP Playbook, Part 3: Preventative Risk Management by building Secure by Design Wiz Leads the 2026 Latio Application Security Report with awards in 4 categories Building an Agentic Cloud Security Ecosystem: A Reference Architecture with Wiz MCP and Infosys Cyber Next The Agile FedRAMP Playbook, Part 2: Proactive Risk Management with Continuous Monitoring Cloud-native Security for your Windows environment: Announcing the Wiz Runtime Sensor for Windows Would You Click ‘Accept’? Automatically detecting malicious Azure OAuth applications using LLMs Wiz Named a Leader in The Forrester Wave™: Cloud Native Application Protection Solutions, Q1 2026 From Detection to Remediation: It’s Time to Rethink AppSec Around Exploitability and Root Cause Fixes The Agile FedRAMP Playbook, Part 1: Why Risk is Your Best Starting Point Introducing AI Cyber Model Arena: A Real-World Benchmark for AI Agents in Cybersecurity Wiz + Spotify Backstage: Security at the Developer’s Desk Building AI Security Together: New Ways to Partner with Wiz for AI Security in 2026 Hacking Moltbook: The AI Social Network Any Human Can Control The Year in Wiz Research: 2025 Most Read Blogs WizExtend is Here: AI and Cloud Security Insights in Your Daily Workflow From Detection to Remediation: Wiz in Your JetBrains IDE Agentic Browser Security: 2025 Year-End Review CodeBreach: Infiltrating the AWS Console Supply Chain and Hijacking AWS GitHub Repositories via CodeBuild A 90-Day Action Plan to Turn Resolutions into Results with Wiz Introducing the Wiz Partner Alliance: A New Chapter for Partner Success Preparing for Post-Quantum Cryptography Wiz Recognized as a 2025 Customers’ Choice in the Gartner® Peer Insights™ Voice of the Customer for CNAPP Expanding the Zero Critical Club to set a new standard for AppSec and SecOps teams Snipping the Long Tail of Shai-Hulud 2.0 Protecting Against Zero-Day Vulnerabilities with SOC-Level ASM Alert MongoBleed (CVE-2025-14847) exploited in the wild: everything you need to know The Kenna Transition: Your Strategic Shift to Exposure Management From MCP to Vibe Coding: Full Endpoint Visibility in Wiz AI Security Bringing Oracle Cloud Identity to Wiz Zero‑Days in the Age of AI: Behind the Scenes of ZeroDay.cloud 2025, with a Record High of CVEs in Critical Cloud Infra Gogs 0-Day Exploited in the Wild Code to Cloud Attacks: From Github PAT to Cloud Control Plane Top AWS re:Invent Announcements for Security Teams in 2025 React2Shell: Technical Deep-Dive & In-the-Wild Exploitation of CVE-2025-55182 React2Shell (CVE-2025-55182): Everything You Need to Know About the Critical React Vulnerability Wiz Product Announcements at re:Invent 2025: Expanding Visibility from Code to Cloud Introducing Wiz SAST: Where Code Risk Meets Cloud Context Wiz Becomes Fastest Security ISV to Reach $1 Billion in AWS Marketplace Lifetime Sales It's Here! Wiz Exposure Management is Now GA Shai-Hulud 2.0 Aftermath: Trends, Victimology and Impact Service Catalog is Here: Expand Risk Visibility for Your Service and Its Dependencies, Simplify Issue Ownership WizOS: Powering Secured Image Adoption with AI 3 OAuth TTPs Seen This Month — and How to Detect Them with Entra ID Logs Mastering Software Governance with Hosted Technologies Inventory Shai-Hulud 2.0 Supply Chain Attack: 25K+ Repos Exposing Secrets Get Certified on Wiz Defend for Threat Detection and Response Blueprint for Security: A Guide to Code, Governance, and Response Frameworks Google Unified Security Recommended Program Names Wiz Among First 3 Strategic Partners Introducing Posture Issues: Transform Security Findings into Actionable Outcomes Empower and Accelerate Your SOC with the Blue Agent Exposure Report: 65% of Leading AI Companies Found with Verified Secret Leaks Wizdom 2025 Product Announcements: Extending the Cloud Operating Model When AI Becomes the Heart of Security: Powering a Future You Can Trust AI-Powered Wiz: From Agents to Everyday Intelligence Defend Agentless Workload Detection: Bringing Visibility to Blind Spots in Threat Detection Securing AI Agents with Wiz AI-SPM Introducing Wiz ASM: Context-Driven Attack Surface Management Securing Critical Infrastructure in the Cloud Era: A Policy and Technology Blueprint How CISOs Should Plan Security Budgets for 2026 Beyond the Checkbox: How Wiz Transforms SOC 2 into a Security Powerhouse Bringing Visibility to Kubernetes: Unified Inventory and Network Insight The Foundation Modern AppSec Is Still Missing: Code to Cloud, Rebuilt the Right Way Dismantling a Critical Supply Chain Risk in VSCode Extension Marketplaces Introducing HoneyBee: How We Automate Honeypot Deployment for Threat Research RediShell: Critical Remote Code Execution Vulnerability (CVE-2025-49844) in Redis, 10 CVSS score Defending against database ransomware attacks AI Security 101: Mapping the AI Attack Surface Introducing zeroday.cloud: First-of-its-kind cloud and AI hacking competition Unifying Cloud Risk and Network Defense: Wiz and Check Point The emerging use of malware invoking AI Wiz achieves FedRAMP High authorization Wiz + HCP Terraform: Close the IaC-to-Cloud Infrastructure Security Gap IMDS Abused: Hunting Rare Behaviors to Uncover Exploits Beyond CVEs: The Exploitation of Everyday Misconfigurations Wiz Research Discovers One in Five Organizations Exposed to Systemic Risks in Vibe-Coded Applications - Here's How to Secure Them Introducing Wiz Incident Response: Your Expert Partner for Cloud Security Incidents Shai-Hulud: Ongoing Package Supply Chain Worm Delivering Data-Stealing Malware DORA Compliance in the Cloud Era: Insights from Deloitte and Wiz How Wiz Customers like Brex and FICO See AI Changing Security Wiz Recognized as a Leader in the 2025 IDC MarketScape for ASPM
The Red Agent POV: How it Reasoned its Way to SSRF | Wiz Blog
https://www.wiz.io/authors/red-agent · 2026-06-17 · via Wiz Blog | RSS feed

This is the first blog post in the Red Agent POV series, where we cover real-life examples of the Red Agent's findings in production. In this post, we’re looking at how the Red Agent found a critical multi-step attack chain that allowed SSRF-to-Local-File-Read on GCP Cloud run. Let’s break down this exploit.

The target

The Red Agent's target was a GCP Cloud Run service: <redacted>.run.app/f. It initially identified that the endpoint accepted a ?url= parameter, and next had to reason about what the application did with that parameter.

How the Red Agent reasons and hunts for risks

Before diving into the exploit, let's explain how the Red Agent hunts for risk for a specific target. The Red Agent mimics a real attacker by operating in runs and iterations to uncover complex, logic-driven vulnerabilities. A run is a full scan pass against the target, which includes multiple iterations where it executes different attack strategies in parallel including testing path traversal, URL confusion, and injection techniques simultaneously rather than sequentially. Between iterations, the Red Agent reflects on what worked, what was blocked, and what the application's behavior reveals about its logic. Each run builds on the last which allows the Red Agent to sharpen its hypotheses and evolve its payloads. For the GCP Cloud Run service target in this blog, it took the Red Agent three runs and roughly 96 requests to find the exploit.

How the attack unfolded

Phase 1: Recon & Baseline Probing (iteration 1-2)

The Red Agent received the target endpoint /f along with metadata indicating it was a GCP Cloud Run service that accepts a ?url= parameter. A URL-fetching parameter on a Cloud Run container is a classic SSRF candidate as the application is designed to make outbound requests on behalf of the caller, and Cloud Run containers can access the GCP metadata server to obtain service account tokens and project credentials. So its first move was to test whether it could redirect that fetch to the GCP metadata server at http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token- the fastest path to credential theft if it proved to work. However, it didn’t- the API validated that the URL pointed to GitHub, blocking the direct metadata pivot. Now the Red Agent knew the constraint and that whatever technique it will try next would need to satisfy a GitHub-bound URL validator.

Phase 2: Classic Path Traversal (iteration 3-12)

Since the ?url= parameter's job is to fetch file contents, the Red Agent hypothesized that the backend ultimately resolves the URL to a local filesystem read, downloading the GitHub file to disk (or a /tmp path in the container) before returning it. If true, injecting traversal sequences into the URL might escape the intended directory and read arbitrary files. It sprayed the ?url= parameter with traversal variants, each designed to bypass a different class of sanitization filter:

  • Standard: ../../../../etc/passwd

  • URL Encoded: %2f..%2f..%2ffetc%2fpasswd 

  • Double-encoded %252f..%252f

  • Null byte: ..%00/etc/passwd

  • Backslash: ..%5c..%5c

  • Unicode overlong: ..%c0%af..%c0%af

  • Non-recursive bypass: ....//....//

It targeted container-specific paths: /app/main.py (application entrypoint), /proc/self/environ (runtime credentials and environment variables), and /app/requirements.txt (dependency manifest) because these are where the high-value data lives in a Cloud Run container. All attempts were blocked - the URL validator wasn't just checking the domain, it was rejecting anything that didn't look like a well-formed GitHub blob URL.

Phase 3: URL Confusion & SSRF  (iteration 13-14)

Path traversal proved to be unsuccessful, as the validator wasn't just checking the path component - it was parsing the full URL structure. So the Red Agent shifted its approach: instead of manipulating where the file is read from on disk, it decided to attempt to trick the URL parser into fetching from a different host entirely. The ?url= parameter is passed to the backend's HTTP client, which resolves the hostname and makes an outbound request. If the validator and the fetcher parse the URL differently, a classic parser differential, it could make the validator see "github.com" while the fetcher actually connects to the GCP metadata server (`metadata.google.internal`). It tested several confusion techniques against the ?url= parameter:

TechniquePayloadExploits
Authority confusiongithub.com@metadata.google.internal/computeMetadata/v1/Parsers that treat text before @ as userinfo, connecting to the host after it
Fragment injectiongithub.com#@metadata.google.internalParsers that strip fragments inconsistently
Subdomain spoofinggithub.com.metadata.google.internalLax domain matching (contains "github.com")
Scheme switchinggcs://graph-explorer/repo/dir.pyHandlers that follow non-HTTP schemes to internal services

But none of these worked, the validator was strict about both the scheme (https://) and the resolved hostname. This told the Red Agent something important: the server does make real outbound HTTP requests to whatever host the URL resolves to. The fetch logic isn't faked or proxied- it's a genuine HTTP client. The Red Agent concluded that it just needed a way to satisfy the validator while pointing the fetch somewhere useful.

Phase 4: Repo Name Injection (iteration 7-11, runs 1-2)

The Red Agent also tested Repo Name Injection. It hypothesized that the backend might be constructing a local path from the parsed repository name, so it injected traversal strings directly into the repo component: - github.com/owner/..%2f..%2fapp/blob/main/main.py - github.com/owner/..%2f..%2fetc/blob/main/passwd.

Phase 5: Real Repo Enumeration (iterations 15-16)

To better understand the application it was attacking, the Red Agent began fingerprinting the environment by testing real GCP-related repositories (e.g., GoogleCloudPlatform/graph-explorer, googleapis/graph-explorer, google/graph-explorer). This helped it guess related internal naming conventions, such as graph-explorer-file-reader.

Phase 6: The Breakthrough - The Double-Slash Absolute Path (run 3)

By this point, the Red Agent had built a detailed mental model of the application from 80+ failed attempts: 

  • The ?url= parameter must contain a structurally valid GitHub blob URL (scheme, domain, owner, repo, /blob/, branch, path)

  • Anything else is rejected before the fetch even happens (learned in Phases 1–3) 

  • The backend makes a real HTTP request to the resolved URL 

  • It's not just parsing the path locally (learned in Phase 3) 

  • The application is related to graph-explorer and runs on Cloud Run with source code at /app/ (learned in Phases 4–5)

Therefore, the Red Agent had to figure out: can it construct a URL that passes GitHub validation but causes the file-reading logic to resolve a local path instead? This is where the two layers of the exploit come together: 

  • Layer 1 - Satisfying the validator: The URL must look like a legitimate GitHub blob reference: https://github.com/{owner}/{repo}/blob/{branch}/{path}. Any request that is deviated from this structure is killed.

  • Layer 2 - The bypass technique: The Red Agent discovered that appending // followed by an absolute filesystem path after a valid GitHub URL structure caused the file-fetching logic to interpret the trailing portion as a local absolute path, while the validator only checked the prefix. The // isn't the payload itself - it's the bypass mechanism that lets the real payload (/proc/self/environ, /app/graph_api.py) slip through. The validator sees a valid GitHub URL while the fetcher sees an absolute path.

The winning payloads:

  • ?url=https://github.com/x/y/blob/z//proc/self/environ (Returned 4,096 bytes)

  • ?url=https://github.com/x/y/blob/z//var/task/graph_api.py (Returned 25,000 bytes)

This is what scanning adaptation looks like: rather than just trying more payloads, the Red Agent synthesized constraints discovered across dozens of failed probes into a technique that satisfied the validator and exploited the fetcher simultaneously.

The Decision Path

Confirmed findings

Once the Red Agent established the file read primitive, it didn't stop at exfiltration- it validated the impact end-to-end. Here's what it extracted and confirmed:

FileSizeImpact
/proc/self/environ4,096 bytesContainer environment variables containing GCP service account credentials and API keys
/var/task/graph_api.py25,000 bytesFull Source Code: Exposure of the entire application logic.
/var/task/graph.zip200 bytesApp Bundle: Metadata regarding the application structure.

Why this matters

A traditional DAST scanner would have tested this endpoint in a handful of requests, trying the metadata server and path traversal, eventually getting blocked and moving on. 

The final payload, github.com/x/y/blob/z//proc/self/environ, doesn't exist in any wordlist or signature database, and at the same time it can't be found by brute force. This exploit the Red Agent uncovered required understanding and reasoning.

It requires recognizing that the validator enforces GitHub URL structure, that the fetcher resolves paths differently than the validator parses them, and that // acts as an absolute path anchor that slips through the gap between the two. This understanding was built incrementally across 96 requests of probing, failing, learning, and adapting. 

Each time the Red Agent faced a blocked attempt, it was a constraint that narrowed the solution space for its exploration. The blocked path traversal revealed strict URL parsing, blocked URL confusion confirmed the fetcher makes real HTTP calls, and the blocked repo name injection confirmed local path construction exists. The breakthrough payload sits at the intersection of all these observations. 

This is what non-deterministic, reasoning-driven security testing unlocks: the ability to discover vulnerabilities that only emerge from chaining together application-specific behaviors, the same class of findings that until now required a skilled human attacker spending hours of manual testing. 

The impact of such exploitable risk, in this example, is unauthenticated access to GCP credentials and full source code - a complete compromise chain from a single URL parameter.

Want to see more from the Red Agent?

We will be sharing more examples of the risks Red Agent uncovers. If you would like to see what types of risks it can find in your environment, learn more about the Red Agent (login required) or schedule a live demo with our team.