zae-limiter: DynamoDB hot partition throttling enables per-entity Denial of Service
Summary
All rate limit buckets for a single entity share the same DynamoDB partition key (namespace/ENTITY#{id}). A high-traffic entity can exceed DynamoDB's per-partition throughput limits (~1,000 WCU/sec), causing throttling that degrades service for that entity — and potentially co-located entities in the same partition.
Details
Each acquire() call performs a TransactWriteItems (or UpdateItem in speculative mode) against items sharing the same partition key. For cascade entities, this doubles to 2-4 writes per request (child + parent). At sustained rates above ~500 req/sec for a single entity, DynamoDB's adaptive capacity may not redistribute fast enough, causing ProvisionedThroughputExceededException.
The library has no built-in mitigation:
- No partition key sharding/salting
- No write coalescing or batching
- No client-side admission control before hitting DynamoDB
RateLimiterUnavailableis raised but the caller has already been delayed
Impact
- Availability: High-traffic entities experience elevated latency and rejected requests beyond what their rate limits specify
- Fairness: Other entities sharing the same DynamoDB partition may experience collateral throttling
- Multi-tenant risk: In a shared LLM proxy scenario, one tenant's burst traffic could degrade service for others
Reproduction
- Create an entity with high rate limits (e.g., 100,000 rpm)
- Send sustained traffic at 1,000+ req/sec to a single entity
- Observe DynamoDB
ThrottledRequestsCloudWatch metric increasing - Observe
acquire()latency spikes andRateLimiterUnavailableexceptions
Remediation Design: Pre-Shard Buckets
- Move buckets to
PK={ns}/BUCKET#{entity}#{resource}#{shard}, SK=#STATE— one partition per (entity, resource, shard) - Auto-inject
wcu:1000reserved limit on every bucket — tracks DynamoDB partition write pressure in-band (name may change during implementation) - Shard doubling (1→2→4→8) triggered by client on
wcuexhaustion or proactively by aggregator - Shard 0 at suffix
#0is source of truth forshard_count. Aggregator propagates to other shards - Original limits stored on bucket, effective limits derived:
original / shard_count. Infrastructure limits (wcu) not divided - Shard selection: random/round-robin. On application limit exhaustion, retry on another shard (max 2 retries)
- Lazy shard creation on first access
- Bucket discovery via GSI3 (KEYS_ONLY) + BatchGetItem. GSI2 for resource aggregation unchanged
- Cascade: parent unaware, protected by own
wcu - Aggregator: parse new PK format, key by shard_id, effective limits for refill, filter
wcufrom snapshots - Clean break migration: schema version bump, old buckets ignored, new buckets created on first access
- $0.625/M preserved on hot path
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| Python (PyPI) | zae-limiter | < 0.10.1 | 0.10.1 |
References
- https://github.com/zeroae/zae-limiter/security/advisories/GHSA-76rv-2r9v-c5m6
- https://nvd.nist.gov/vuln/detail/CVE-2026-27695
- https://github.com/zeroae/zae-limiter/commit/481ce44d818d66e31d8837bc48519660ce4c267f
- https://github.com/zeroae/zae-limiter
- https://github.com/zeroae/zae-limiter/releases/tag/v0.10.1
- https://pypi.org/project/zae-limiter
- https://github.com/advisories/GHSA-76rv-2r9v-c5m6
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L- Weakness (CWE)
CWE-770- Platform
- Python (PyPI)
- Package
zae-limiter- Disclosed
- 25.02.2026
- Updated
- 11.10.2026 14:17
Sources and licenses
OSV / GitHub Advisory Database - PYSEC-2026-3434 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-76rv-2r9v-c5m6 - CC BY 4.0
Vulnerability history: zae-limiter
All published vulnerabilities of this package (Python (PyPI)), newest first. Shows whether this is a one-off slip or a package that needs watching.
This is the only known vulnerability of this package.
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.