GHSA-j659-8xh6-5pq5 — atomic-agents-stack
GHSA-j659-8xh6-5pq5 is a CWE-770 vulnerability in atomic-agents-stack. A fix is available for atomic-agents-stack — see the affected versions and patch details below.
atomic-agents-stack: Parallel helper/delegate batch reserves $0 for models absent from the pricing table, bypassing the cost-cap fan-out guard
Exploitation Status
No confirmed exploitation observed yet
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for GHSA-j659-8xh6-5pq5.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
atomic-agents-stackReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects PyPI packages — download data is not available via public APIs for these ecosystems.
Description
_estimate_batch_cost (atomic_agents/agent.py) looks up the per-model output price with PRICING.get(model, {}), returning 0.0 for any model not in the hardcoded pricing table. _check_batch_reservation then early-returns when the reservation is <= 0, skipping the batch reservation entirely. That reservation is the only defense against the documented fan-out race where every parallel helper/delegate reads the identical pre-batch on-disk cost total and each passes its individual check even though the collective spend overruns the configured cap.
Impact: an operator running any model not in the pricing table (self-hosted/Ollama/vLLM, a new provider SKU) with cost_guardrails + daily_cap_usd set believes the cap protects them, but a single parallel batch can blow past the cap. The parallel-helper model argument can also be steered to an unknown id. The sibling dream._estimate_dream_cost does this correctly (PRICING.get(model, _fallback_pricing())), which makes this a clear defect.
Affected: agent.py (_estimate_batch_cost / _check_batch_reservation), all versions through 1.0.0.
Fix: use PRICING.get(model, _costs._fallback_pricing())['output'] (mirror dream/calc_cost). Add a conformance test asserting an unknown-model batch reserves > 0 and that an over-cap unknown-model batch raises CostGuardrailBlocked.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐍PyPI | atomic-agents-stack | all versions | 1.1.0pip install --upgrade 'atomic-agents-stack==1.1.0' |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for atomic-agents-stack, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update atomic-agents-stack to 1.1.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-j659-8xh6-5pq5 is resolved across your whole dependency graph.
Workarounds
Cap what an attacker can consume: apply request size, rate and timeout limits in front of the affected component, and run it with memory and CPU limits so exhaustion degrades one worker rather than the whole service.
Frequently Asked Questions
Is GHSA-j659-8xh6-5pq5 in your dependencies?
Find it across PyPI, including transitive dependencies.