Skip to content

v0.5.9

Choose a tag to compare

@github-actions github-actions released this 15 Jul 15:12
· 170 commits to main since this release
da023d8

Changelog

All notable changes to this project will be documented here

0.5.9 - 2026-07-15

✨ New features

  • Feat: add missing attack modes to report + update BloodHound icons - (7a8e244)
  • Report exploit map: add 9 new finding-to-attack mappings for LOTP, - (7a8e244)
  • Added bump deps claude skill for dependabot alerts - (10bd467)
  • Feat: add built-in listener for supply chain worm callback exfiltration - (3a785b5)
  • --ror-listen, extended with Project field support for the - (3a785b5)
  • Docs: add CTF lab screenshots to gogatoz Astro docs - (da02284)

🐛 Bug fixes

  • Fixed bugs and improved features - (8a5f87a)
  • Fix: auto-merge retry on 405 and pivot BFS project discovery at depth > 0 - (f63520b)
  • Fix: correct pipeline URL reporting, cache-poison mkdir, and nested-runner download - (b460f90)
  • Fix: worm listener should wait for callbacks regardless of promoted count - (82f9ad2)
  • Fix: resolve remaining SA5011 staticcheck nil pointer warnings in test files - (79e036a)
  • Files so staticcheck recognizes subsequent pointer dereferences as - (79e036a)
  • Fix: correct FLAG regex and sanitize worm stage name extraction - (44b3284)
    • memorydump.go: fix broken ERE pattern FLAG+[^+]++ → FLAG[+][^+]+[+] - (44b3284)
  • Fix: resolve SA5011 staticcheck nil pointer warnings in test files - (1d56868)
  • Fix: prevent gitlab.com and seed nodes from polluting BloodHound graphs - (dd658b3)
  • Fix: update BloodHound schema CICD_Project color and CICD_Job icon - (379055a)
  • Fix: supply chain worm injected duplicate stages key breaking YAML - (a3a1908)
  • Fix: multiple payload generators produced invalid YAML + runtime failures - (072fdff)
  • The same YAML indentation bug: script content inserted into - | block - (072fdff)
  • Fix: LOTP Phantom Gyp payload output was silently discarded - (80e38f1)

📚 Documentation

  • Docs: update CLAUDE.md with payload generator gotchas from CTF session - (9be7b4f)

🛠 Improvements

⚙️ Miscellaneous

  • Merge pull request #32 from mr-pmillz/release/v0.5.9 - (da023d8)
  • Release/v0.5.9 - (da023d8)
  • Chore: update changelog - (9f5fd6f)
  • Merge pull request #31 from mr-pmillz/fix/bugz - (8a5f87a)
  • Expand memory dump secrets grep - (10754bb)
  • Go fix ./... - (473c126)
    • auto-merge retries MergeMergeRequest up to 10 times with backoff, - (f63520b)
  • allowing the MR pipeline to complete before merging (fixes 405) - (f63520b)
    • pivot orchestrator discovers projects via token membership at - (f63520b)
  • depth > 0 instead of re-scanning only the initial targets, enabling - (f63520b)
  • full BFS lateral movement across gateway → middleware → crown - (f63520b)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (f63520b)
    • commit-ci now reports the CI-file pipeline instead of the stale - (b460f90)
  • branch-creation pipeline by snapshotting the prior ID and waiting - (b460f90)
  • for a newer one - (b460f90)
    • cache-poison default payload adds mkdir -p .git/hooks before writing - (b460f90)
  • the post-checkout hook (fixes "No such file or directory") - (b460f90)
    • nested-runner payload checks for existing gitlab-runner binary before - (b460f90)
  • downloading, falling back to system binary or fresh download - (b460f90)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (b460f90)
  • When --webhook was provided but the worm propagated to 0 repos, the - (82f9ad2)
  • Listener was immediately stopped without waiting. Now the listener - (82f9ad2)
  • Always waits for the full timeout when --webhook is set, allowing - (82f9ad2)
  • Callbacks from previously infected repos or manual testing. - (82f9ad2)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (82f9ad2)
  • Add explicit return after t.Fatal/t.Fatalf in nil guards across 9 test - (79e036a)
  • Unreachable. - (79e036a)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (79e036a)
  • Resolve SA5011 staticcheck nil pointer warnings in test files - (cbffbe0)
    • supplychain_worm.go: validate detected stage name against safe pattern - (44b3284)
  • to prevent YAML injection from crafted target CI configs - (44b3284)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (44b3284)
  • Chore: apply linter auto-fixes to memorydump, worm, bloodhound, and exporter test - (b276879)
  • Linter/formatter changes applied by golangci-lint and goimports. - (b276879)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (b276879)
  • Add explicit return after t.Fatal/t.Fatalf in nil-check guard blocks. - (1d56868)
  • Staticcheck SA5011 doesn't track that t.Fatal terminates the test, so - (1d56868)
  • It flags subsequent field access as a possible nil pointer dereference. - (1d56868)
  • The return makes the control flow explicit for the linter. - (1d56868)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (1d56868)
  • Two fixes to eliminate junk nodes in BloodHound attack surface graphs: - (dd658b3)
    1. buildGraphFromInputs: when gitlab-url is unset or is the default - (dd658b3)
  • "https://gitlab.com", infer the actual URL from the most recent - (dd658b3)
  • non-gitlab.com scan session in the database. This prevents the - (dd658b3)
  • builder from creating a CICD_GitLabInstance node for gitlab.com - (dd658b3)
  • when the user forgot to set GITLAB_URL. - (dd658b3)
    1. ExportToWriter: skip seed_data.json in the ZIP when the real graph - (dd658b3)
  • has edges. The seed data bootstraps BH-CE's kind registry but - (dd658b3)
  • creates a junk "GoGatoZ Seed Node (ignore)" instance node that - (dd658b3)
  • pollutes the graph. Only include it for empty graphs. - (dd658b3)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (dd658b3)
  • Go fix ./... - (1b090e5)
  • Go fmt ./... - (48c5e09)
    • CICD_Project: color changed from #1F75CB to #E24329 (GitLab orange) - (379055a)
  • to match the custom-nodes API entry - (379055a)
    • CICD_Job: icon changed from "gears" to "faucet-drip" per user request - (379055a)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (379055a)
  • Closes PR #15 and #30 go version bump 1.26.5 - (f23750c)
  • Version bump astro docs - (a883a68)
  • Container escape, C2 channel, AI injection, OIDC, cache key injection, - (7a8e244)
  • DIND, and fork script execution. PRIVILEGED_RUNNER_RISK now maps to - (7a8e244)
  • --container-escape instead of --commit-ci --payload ror-shell. - (7a8e244)
  • BloodHound schema.json icon updates (Font Awesome free solid names): - (7a8e244)
    • CICD_Project: "cat" (GoGatoZ mascot) - (7a8e244)
    • CICD_Group: "layer-group" (stacked layers) - (7a8e244)
    • CICD_Job: "gears" (multiple gears) - (7a8e244)
    • CICD_Finding: "triangle-exclamation" (warning triangle) - (7a8e244)
    • CICD_Pipeline: "diagram-project" (pipeline flow) - (7a8e244)
    • Server, microchip, file-code, key, id-badge unchanged - (7a8e244)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (7a8e244)
  • Add learnings from the CTF walkthrough session: YAML block scalar - (9be7b4f)
  • Indentation, set -e dangers, gyp output routing, container escape - (9be7b4f)
  • Env capture, worm CI injection, worm listener mode, and the || true - (9be7b4f)
  • Pattern for payload function calls. - (9be7b4f)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (9be7b4f)
  • When --supply-chain-worm is used with --webhook, gogatoz now: - (3a785b5)
    1. Starts a built-in HTTP listener (port extracted from webhook URL) - (3a785b5)
    1. Auto-generates a curl callback payload that sends JSON with - (3a785b5)
  • project path + base64-encoded printenv from each infected repo - (3a785b5)
    1. Propagates the worm to sibling repos in the target group - (3a785b5)
    1. Waits for callbacks with a 3-minute timeout + 5s grace period - (3a785b5)
    1. Pretty-prints exfiltrated secrets per-project with CI var filtering - (3a785b5)
    1. Persists all collected secrets to the SQLite database - (3a785b5)
  • The listener reuses the existing Listener infrastructure from - (3a785b5)
  • {"project":"...","data":"..."} JSON format the worm payload sends. - (3a785b5)
  • Usage: - (3a785b5)
  • gogatoz attack --supply-chain-worm \ - (3a785b5)
  • --target worm-labs/vuln-worm \ - ([3a785b5](https://github.com/mr-pmillz/gogatoz/commit/3a785b58117d1a7d7e7bb400e7e2e483580ba561))
    
  • --worm-target-group worm-labs \ - ([3a785b5](https://github.com/mr-pmillz/gogatoz/commit/3a785b58117d1a7d7e7bb400e7e2e483580ba561))
    
  • --webhook http://host.docker.internal:9445 - ([3a785b5](https://github.com/mr-pmillz/gogatoz/commit/3a785b58117d1a7d7e7bb400e7e2e483580ba561))
    
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (3a785b5)
  • The worm CI generator prepended a separate stages: [worm] block - (a3a1908)
  • Before the existing CI config, causing duplicate stages: keys that - (a3a1908)
  • GitLab silently rejected (0 jobs, no yaml_errors). Fixed by using the - (a3a1908)
  • Existing CI's first stage name ("build") for the worm job and omitting - (a3a1908)
  • The separate stages key. Also added rules: [- when: always] to - (a3a1908)
  • Ensure the worm job runs on all pipeline triggers. - (a3a1908)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (a3a1908)
  • Container escape, C2 channel, and variable injection payloads all had - (072fdff)
  • Scalars without proper indentation, causing GitLab to silently reject - (072fdff)
  • The YAML (pipeline created with 0 jobs, no yaml_errors). Fixed by using - (072fdff)
  • IndentBlock() to indent script content under the block scalar. - (072fdff)
  • Memory dump payload fixes: - (072fdff)
    • Removed set -e that killed the script when credential sweep found - (072fdff)
  • no files (the [ -e ] && cp pattern returns 1 on missing files) - (072fdff)
    • Added || true to all credential sweep copy commands - (072fdff)
    • Ported Python-based /proc//mem scanner from the GitHub Actions - (072fdff)
  • Runner.Worker memory dump technique — uses proper seek/read instead - (072fdff)
  • of byte-by-byte dd, with regex extraction for token patterns - (072fdff)
    • Added FLAG+ pattern to token extraction regex - (072fdff)
  • Container escape payload fixes: - (072fdff)
    • Added env_dump.txt capture step (printenv) so CI variables including - (072fdff)
  • flags are captured in the bundle artifacts - (072fdff)
    • Added || true on _ESCAPE function call to prevent pipeline failure - (072fdff)
    • Added escape_env_dump.txt to artifacts paths - (072fdff)
  • C2 channel payload fixes: - (072fdff)
    • Fixed find / command missing || true (returns non-zero on - (072fdff)
  • permission errors in /proc, /sys) - (072fdff)
    • Added || true on _C2CHANNEL function call - (072fdff)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (072fdff)
  • Add 23 screenshots from the CTF lab environment showing exploited - (da02284)
  • Pipelines, job logs, CI variables, merge requests, and the flag server. - (da02284)
  • Screenshots are added to the scanning, supply chain, and lateral - (da02284)
  • Movement use-case pages to illustrate real attack artifacts. - (da02284)
  • Also adds tag poisoning (Trivy-style) section to supply-chain docs - (da02284)
  • With --tamper-tag usage example. - (da02284)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (da02284)
  • The binding.gyp template redirected node index.js output to /dev/null, - (80e38f1)
  • And index.js used stdio: ['ignore', 'pipe', 'pipe'] which captured but - (80e38f1)
  • Discarded the command output. The base64-encoded env dump never appeared - (80e38f1)
  • In the job log. - (80e38f1)
  • Fix: remove /dev/null redirect from binding.gyp and have index.js write - (80e38f1)
  • Command output to stderr (which gyp's <!(…) substitution does not - (80e38f1)
  • Capture), making the payload output visible in the CI job trace. - (80e38f1)
  • Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - (80e38f1)
  • Merge pull request #28 from mr-pmillz/main - (00808de)
  • Sync main back 2 develop - (00808de)