GHSA-cc8m-98fm-rc9g: Verified Repro With Script Download
GHSA-cc8m-98fm-rc9g: Skipper Lua Filter Arbitrary Code Execution
GHSA-cc8m-98fm-rc9g is verified against github.com/zalando/skipper · go. This high reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00066.
What Is GHSA-cc8m-98fm-rc9g?
GHSA-cc8m-98fm-rc9g is a high-severity arbitrary code execution vulnerability in the Skipper API gateway (github.com/zalando/skipper) via Lua filters, arising because inline Lua filters were enabled by default before v0.23. Pruva reproduced it (reproduction REPRO-2026-00066).
GHSA-cc8m-98fm-rc9g Severity
GHSA-cc8m-98fm-rc9g is rated high severity.
High — serious impact or readily exploitable. Prioritize remediation.
How to Reproduce GHSA-cc8m-98fm-rc9g
pruva-verify REPRO-2026-00066 curl -O https://pruva.dev/api/v1/reproductions/REPRO-2026-00066/artifacts/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh Proof of Reproduction for GHSA-cc8m-98fm-rc9g
Reproduced by Pruva's autonomous agents — 73 tool calls over 9 min. Full root-cause analysis and the complete transcript are below.
How the agent worked
Root Cause and Exploit Chain for GHSA-cc8m-98fm-rc9g
Summary
Skipper releases prior to v0.23.0 enable inline Lua filters by default (-lua-sources=inline,file). Any user able to submit a Lua filter (for example through an Ingress resource) can run arbitrary Lua code inside the Skipper process and access the local filesystem. Our reproduction shows that a crafted inline Lua script can read /etc/hostname and leak its contents through Skipper’s logs.
Impact
- Component:
github.com/zalando/skipperproxy binary - Affected Versions: all versions before v0.23.0 (where Lua is enabled by default)
- Risk: High (CVSS 8.8) – attackers can execute arbitrary Lua code, read sensitive files (tokens, secrets), and exfiltrate data via logs or upstream responses. If the Skipper process holds credentials or tokens, they can be stolen.
Root Cause
Skipper allowed inline Lua scripts to be embedded directly into route definitions and executed without sandboxing. When -lua-sources includes inline (default before v0.23.0), user-controlled Lua scripts run in the Skipper process with access to the standard Lua IO library. This enables arbitrary file reads/writes and system interaction. The issue was mitigated in v0.23.0 by disabling Lua filters by default (commit 0b52894570773b29e2f3c571b94b4211ef8fa714).
Reproduction Steps
- Run
repro/reproduction_steps.shfrom the workspace root. - The script downloads Skipper v0.22.0, writes a malicious inline Lua route that reads
/etc/hostname, starts Skipper with the route, and triggers it viacurl. - Successful reproduction is evidenced by the Skipper log entry containing
[EXFIL] <hostname>and the summary message printed by the script. Logs are stored underlogs/.
Evidence
- Logs:
logs/reproduction.log– full script run outputlogs/skipper_inline.log– Skipper process logslogs/exfiltration.txt– filtered[EXFIL]line showing leaked hostnamelogs/request.log– HTTP status (404) from trigger request
- Key Excerpt:
logs/exfiltration.txtcontainsError calling request ... [EXFIL] <hostname>proving filesystem data leakage. - Environment:
uname -a→Linux runsc 4.4.0 ... x86_64 GNU/Linux
Recommendations / Next Steps
- Upgrade Skipper to v0.23.0 or later, where Lua filters are disabled by default.
- If Lua scripts are required, explicitly limit
-lua-sources=fileand ensure only trusted scripts are deployed on the filesystem. - Harden Lua execution by removing IO modules or running in a restricted sandbox, and add automated tests to ensure inline Lua stays disabled unless explicitly allowed.
Additional Notes
- The reproduction script is idempotent: it reuses downloaded artifacts, stops Skipper between runs, and was executed successfully twice in a row.
- The exploit demonstrates read access; write/execute primitives are also possible via Lua IO APIs under the same configuration.
GHSA-cc8m-98fm-rc9g Reproduction Transcript
The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.
Full session Replay every step — scrub the timeline or play it back.
Unknown error
Unknown error
Unknown error
Artifacts and Evidence for GHSA-cc8m-98fm-rc9g
Scripts, logs, diffs, and output captured during the reproduction.
No artifacts available
How to Fix GHSA-cc8m-98fm-rc9g
FAQ: GHSA-cc8m-98fm-rc9g
How does the Skipper Lua filter code execution attack work?
Which Skipper versions are affected, and where is it fixed?
How severe is this Skipper Lua filter issue?
How can I reproduce the Skipper Lua filter vulnerability?
References for GHSA-cc8m-98fm-rc9g
Authoritative sources for GHSA-cc8m-98fm-rc9g — official vulnerability databases and the upstream advisory. Pruva's reproduction verifies the issue firsthand; these are the primary records to corroborate it.