PT-2026-45674 · Pypi · Aiosend

Published

2026-05-22

·

Updated

2026-05-22

CVSS v3.1

7.5

High

VectorAV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Vulnerability Description

In aiosend/webhook/base.py, the WebhookHandler.feed update() method performs full deserialization of the incoming JSON via Pydantic before verifying the HMAC signature. Anyone can send a request with an arbitrary body — the server will parse it, spend CPU and memory, and only then reject it.

Vulnerable Code

python
# aiosend/webhook/base.py — feed update()
update = Update.model validate(body, context={"client": self}) # parsing — always
if not self. check signature(body, headers):          # auth — too late
  return False
Additional aggravating factor: CryptoPayObject is declared with ConfigDict(extra="allow") — all arbitrary fields from the body are stored in memory without any limits.

Minimal PoC

Requests with deliberately invalid signatures (zero credentials):
extra fieldsbody sizeparse timestatus
0336 B26 µs403 REJECTED
1,00082 KB257 µs403 REJECTED
5,000410 KB1,183 µs403 REJECTED
10,000820 KB2,552 µs403 REJECTED
10,000 (×512B)5.3 MB7,490 µs403 REJECTED
All requests were rejected — but the server already performed parsing for each one. 10 parallel threads with 5 MB bodies = >75 ms of CPU spent on requests that will never be authorized.

Affected Components

  • aiosend/webhook/base.pyWebhookHandler.feed update()
  • aiosend/types/base.pyCryptoPayObject (extra="allow")
  • All adapters: AiohttpManager, FastAPIManager, FlaskManager

Exploitation Conditions

  • Attacker: anyone with network access to the webhook endpoint
  • Authentication: not required
  • Body size limit: absent at the library level (Flask and FastAPI have no default limit)

The advisory was translated using Copilot.

Fix

Resource Exhaustion

Found an issue in the description? Have something to add? Feel free to write us 👾

Weakness Enumeration

Related Identifiers

GHSA-7M8F-HGJQ-8GC9

Affected Products

Aiosend