Baseten GitHub PAT Exposure via Public Harbor Image – How Strix Found Admin Access in 25 Minutes
TL;DR
In July 2026, the autonomous hacking agent Strix uncovered a GitHub personal access token (PAT) embedded in a publicly accessible Docker image from Basename’s Harbor registry. The token, created in March 2023, granted admin and push access to Baseten’s main product repo, GitOps repo, Homebrew tap, and several private customer repositories. The finding was disclosed, the token rotated, and the public registry project privatized within 24 hours.
How the vulnerability was discovered
Strix performed black‑box reconnaissance on the *.baseten.co domain, identified a public Harbor registry (gcp-us-east4-zlw.registry.baseten.co), and anonymously pulled the baseten/baseten-app image. After extracting the image manifest and layers, Strix:
- Ran TruffleHog on the image’s filesystem and config.
- Detected a GitHub PAT stored in the Docker build history (
history[].created_by). - Verified the token was still valid by issuing a
GET /userrequest, which returned the accountbasetenbot.
"The token in the Docker build history, followed by GitHub identifying it as basetenbot. The credential is redacted." – Strix blog post
Scope of the leaked token
GitHub reported the token’s OAuth scope as repo, meaning full repository access. Strix enumerated the repositories reachable by the token and found:
| Repository (obfuscated) | Access granted |
|---|---|
basetenlabs/b*** (product) |
admin: true, push: true |
basetenlabs/f*** (GitOps) |
admin: true, push: true |
basetenlabs/h*** (CLI) |
admin: true, push: true |
| Additional private repos | read/write |
These permissions would allow an attacker to:
- Modify the inference platform’s source code.
- Alter GitOps manifests that control production clusters.
- Inject malicious binaries into the CLI distribution channel.
- Access customer‑specific repositories containing potentially sensitive data.
Root cause: leaking build credentials
The token originated from a Docker build step on March 3 2023 that injected a GitHub token via a build argument:
ARG GITHUB_TOKEN
RUN GITHUB_TOKEN=${GITHUB_TOKEN} bash -c '\
if [[ "${GITHUB_TOKEN}" != "" ]]; then \
git config --global --add \
url."https://${GITHUB_TOKEN}@github.com/".insteadOf "git@github.com:"; \
fi'
Docker records the exact command line in the image’s build history, unintentionally persisting the raw token. The underlying issues were:
- Using a build argument for a secret – Docker stores the value in metadata.
- Persisting the token in Git configuration – Even if the argument were removed later, the credential remained in the image.
Recommended remediation steps
- Never pass secrets as build arguments. Use Docker BuildKit secret mounts (
--secret id=github,src=...) to provide temporary credentials that do not appear in image metadata. - Inspect image history with
docker history --no-truncor by downloading the config blob and checkinghistory[].created_byfor leaked values. - Rotate any exposed tokens immediately and audit all repositories for unauthorized changes.
- Apply the principle of least privilege: grant build tokens only read access to the specific private dependencies they need, and set short expirations.
- Privatize container registries that host internal images; avoid exposing them publicly unless deliberately intended.
Disclosure timeline and response
| Date & Time | Action |
|---|---|
| July 13, 2026 11:10 PM | Strix report submitted – live basetenbot token, public Harbor project, repo permissions. |
| July 14, morning | Baseten made the Harbor project private. |
| July 14, 4:34 PM | Baseten Security confirmed critical status, rotated the token, requested image deletion. |
| July 14, 5:05 PM | Reporter confirmed deletion and added two lower‑severity findings. |
| July 17 | Remaining findings closed. |
| September | Public disclosure prepared and approved. |
Baseten’s security team acted quickly, rotating the token and privatizing the registry within hours, and even sent thank‑you swag.
"We thank Strix for their responsible disclosure. We took immediate steps to invalidate the leaked key and remove the public container image. Our logs confirm the vulnerability was never exploited and no customer data was exposed." – Baseten security representative (HN comment)
Community reactions
- Positive feedback – Several commenters praised the rapid remediation and the value of autonomous testing.
- Ethical concerns – Some users questioned whether it was appropriate for a security vendor to run an autonomous agent against a prospective vendor without explicit prior agreement, noting potential legal gray areas.
- Technical observations – Others highlighted that the issue could have been discovered with traditional pen‑testing tools, but emphasized the speed and automation advantage of AI‑driven agents.
Takeaways for operators
- Treat container images as long‑lived attack surfaces – Even old images can contain active secrets.
- Automate secret scanning across both filesystem layers and build metadata.
- Implement short‑lived, scoped tokens for CI/CD pipelines and container builds.
- Run autonomous security agents (like Strix) regularly against your own domains to surface hidden exposures before attackers do.
If you rely on GitHub‑based builds or public container registries, audit your existing images today. The cost of a leaked token can be orders of magnitude higher than the effort required to prevent it.
Sources
Related
- Dispatch
- Dispatch
- Project
- Dispatch
- Dispatch