CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-7M8F-HGJQ-8GC9

GHSA-7M8F-HGJQ-8GC9: Pre-Authentication Denial of Service via Insecure Deserialization Order in aiosend

Amit Schendel
Amit Schendel
Senior Security Researcher

May 22, 2026·6 min read·12 visits

Executive Summary (TL;DR)

Pre-auth DoS in aiosend < 3.0.6 due to full Pydantic JSON deserialization occurring prior to HMAC signature verification on webhook endpoints.

The aiosend library prior to version 3.0.6 contains a pre-authentication Denial of Service (DoS) vulnerability in its webhook handling mechanism. The software processes and deserializes incoming JSON payloads before verifying the cryptographic signature, allowing unauthenticated attackers to exhaust server CPU and memory resources by sending large, complex payloads.

Vulnerability Overview

The aiosend Python package provides webhook handling capabilities for applications interacting with external APIs. Versions prior to 3.0.6 contain a severe design flaw in the request processing pipeline. The software processes and deserializes incoming JSON payloads before verifying the cryptographic authenticity of the request.

This architectural inversion allows unauthenticated attackers to force the application to perform computationally expensive operations. The vulnerability resides specifically in the WebhookHandler.feed_update() method within the aiosend/webhook/base.py module. Attackers exploit this component by sending arbitrarily large or complex JSON payloads to the exposed webhook endpoint.

The vulnerability is classified as CWE-400 (Uncontrolled Resource Consumption). Successful exploitation results in a Denial of Service (DoS) condition. The application will exhaust CPU and memory resources processing malicious input, leading to service degradation or complete unavailability for legitimate requests.

Root Cause Analysis

The vulnerability stems from an insecure sequence of operations in the webhook processing logic. When an HTTP request arrives, the feed_update() method immediately invokes Pydantic's model_validate() function on the raw request body. This operation parses the JSON string into Python objects and performs deep type validation across the nested data structures.

Crucially, the application only calls the _check_signature() method to verify the HMAC signature after the model_validate() operation completely finishes. If the signature is invalid, the application correctly drops the request and returns a 403 status. However, the computational cost of parsing the untrusted payload has already been incurred by the server.

An aggravating configuration factor exacerbates this parsing overhead. The CryptoPayObject class, defined in aiosend/types/base.py, is initialized with ConfigDict(extra="allow"). This specific Pydantic configuration instructs the parser to accept and store any arbitrary, undeclared fields present in the JSON payload.

Consequently, the parser will allocate memory and process massive volumes of extraneous data injected by an attacker. Because the library does not enforce a maximum body size for incoming webhooks by default, the resource consumption scales directly with the attacker's payload size.

Code Analysis

The vulnerable implementation in aiosend/webhook/base.py clearly demonstrates the authorization bypass logic. The input string is passed directly into the data model validation routine before any security checks execute.

# Vulnerable implementation in aiosend/webhook/base.py (Prior to 3.0.6)
def feed_update(self, body: bytes, headers: dict):
    # Parsing occurs first, consuming CPU and memory
    update = Update.model_validate(body, context={"client": self})
 
    # Authentication occurs too late in the execution flow
    if not self._check_signature(body, headers):
        return False
 
    # ... further processing ...

The patched implementation in version 3.0.6 corrects the operational sequence. The _check_signature function acts as a guard clause, executing strictly before any resource-intensive data processing occurs.

# Patched implementation in aiosend/webhook/base.py (v3.0.6)
def feed_update(self, body: bytes, headers: dict):
    # Authentication acts as a strict guard clause
    if not self._check_signature(body, headers):
        return False
 
    # Parsing only occurs for authenticated, trusted payloads
    update = Update.model_validate(body, context={"client": self})
 
    # ... further processing ...

This structural change ensures the application rejects unauthenticated requests with minimal CPU cycles. The asynchronous event loop remains unblocked, and unauthorized payloads are discarded before significant memory allocation occurs.

Exploitation Mechanics

Exploiting this vulnerability requires sending HTTP POST requests to the application's webhook endpoint. The attacker constructs a JSON payload containing thousands of extraneous key-value pairs or deeply nested objects. The payload size is constrained only by the underlying web server limits, which often default to several megabytes.

The attacker deliberately omits or invalidates the HMAC signature headers. Upon receiving the request, the application routes the payload to WebhookHandler.feed_update(). The Pydantic model parser attempts to validate the massive structure, blocking the asynchronous event loop or consuming a worker thread during the operation.

Proof-of-Concept testing demonstrates linear degradation in performance based on payload size and complexity. Processing a standard 336-byte payload requires approximately 26 microseconds. Injecting 10,000 extra fields (a 5.3 MB payload) increases processing time to 7,490 microseconds (7.5 milliseconds) per request.

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

An attacker orchestrating a flood of these requests concurrently will saturate the available worker threads or stall the async event loop. Legitimate requests will queue and eventually time out, resulting in a complete Denial of Service.

Impact Assessment

The vulnerability allows unauthenticated, remote attackers to degrade or disable the affected application. Because the flaw exists in the initial request handling layer, no specific configuration or prior access is necessary. The application merely needs to expose the webhook endpoint to the network.

The CVSS v3.1 vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, resulting in a High severity score of 7.5. The attack complexity is low, and the attack vector is network-based. The primary impact is entirely concentrated on the availability metric.

Applications lacking strict request body size limits at the reverse proxy or WAF layer face the highest risk. The arbitrary field parsing via ConfigDict(extra="allow") guarantees that memory consumption will scale directly with the attacker's payload size. Sustained exploitation leads directly to Out-of-Memory (OOM) process termination by the operating system.

Remediation and Mitigation

The primary remediation strategy requires updating the aiosend library to version 3.0.6 or later. This release restructures the feed_update method to perform signature verification strictly before executing Pydantic's model_validate. Developers must review their dependency lockfiles to ensure the updated version is actively deployed.

In environments where immediate patching is unfeasible, administrators can deploy interim mitigations using a Web Application Firewall (WAF) or reverse proxy. Configuring Nginx, HAProxy, or a cloud WAF to restrict the client_max_body_size for specific webhook URIs significantly reduces the attack surface. Limiting payloads to a reasonable size prevents the most severe CPU and memory exhaustion scenarios.

Application developers should implement framework-level middleware to enforce strict Content-Length limits on webhook routes. Frameworks like FastAPI, Aiohttp, and Flask allow developers to intercept requests and reject oversized payloads before they reach the application logic layer.

Official Patches

vovchic17Official Security Advisory

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected Systems

aiosend Python packageApplications utilizing aiosend for webhook processing

Affected Versions Detail

Product
Affected Versions
Fixed Version
aiosend
vovchic17
< 3.0.63.0.6
AttributeDetail
Vulnerability TypePre-auth Denial of Service (DoS)
CWE IDCWE-400 (Uncontrolled Resource Consumption)
CVSS v3.1 Score7.5 (High)
Attack VectorNetwork
Authentication RequiredNone
Affected Componentaiosend/webhook/base.py
Exploit StatusPoC Available

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
T1190Exploit Public-Facing Application
Initial Access
CWE-400
Uncontrolled Resource Consumption

The software does not properly control the allocation and maintenance of a limited resource, thereby enabling an attacker to cause a denial of service.

Vulnerability Timeline

Vulnerability published in GitHub Advisory Database
2026-05-22

References & Sources

  • [1]GitHub Advisory Database: GHSA-7M8F-HGJQ-8GC9
  • [2]aiosend Security Advisory
  • [3]aiosend Repository

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•4 minutes ago•CVE-2026-56677
8.6

CVE-2026-56677: Unauthenticated Server-Side Request Forgery in 9Router OIDC Test Endpoint

A high-severity security vulnerability exists in 9Router, an AI router and token saver dashboard. When dashboard authentication features are disabled or left in default configurations, the application exposes administrative testing routines directly to the public internet. Unauthenticated network adversaries can exploit the OIDC configuration validation endpoint to initiate arbitrary HTTP requests, routing unauthorized traffic to local loops, adjacent container ports, and cloud resource metadata interfaces.

Amit Schendel
Amit Schendel
0 views•5 min read
•about 1 hour ago•CVE-2026-64849
9.3

CVE-2026-64849: Server-Side Request Forgery (SSRF) in MLflow Webhooks via DNS Rebinding

CVE-2026-64849 is a critical Server-Side Request Forgery (SSRF) vulnerability affecting MLflow tracking servers prior to version 3.15.0. It allows unauthenticated remote attackers to bypass outbound request destination filters using DNS rebinding or HTTP redirects. This exposure risks compromising sensitive cloud infrastructure metadata and internal microservices.

Alon Barad
Alon Barad
2 views•5 min read
•about 2 hours ago•CVE-2026-69146
6.5

CVE-2026-69146: Missing Authorization Bypass in MLflow Basic Authentication Middleware

This technical report details a missing authorization vulnerability (CVE-2026-69146 / GHSA-3p64-6gvh-82v5) affecting the MLflow platform from version 3.13.0 to 3.15.0. When MLflow is configured with the built-in basic-auth plugin, authenticated users can bypass run-level UPDATE authorization checks, enabling unauthorized dataset and model lineage metadata injection.

Alon Barad
Alon Barad
2 views•7 min read
•about 3 hours ago•CVE-2026-69148
7.1

CVE-2026-69148: Broken Object Level Authorization (BOLA) in MLflow Model Registry

MLflow prior to version 3.15.0 fails to perform proper authorization checks when registering model versions, allowing authenticated users with access to a registered model to link and access artifacts from runs and models belonging to other users without authorization.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 4 hours ago•CVE-2026-59893
7.5

CVE-2026-59893: Regular Expression Denial of Service in sqlparse Lexer

A high-severity Regular Expression Denial of Service (ReDoS) vulnerability in the sqlparse Python library prior to version 0.6.0 allows unauthenticated remote attackers to trigger CPU exhaustion and application denial of service via crafted SQL inputs containing unmatched dollar-quoted literals or unclosed multiline comments.

Alon Barad
Alon Barad
4 views•6 min read
•about 5 hours ago•GHSA-FHGH-WQ4Q-R37X
7.8

GHSA-FHGH-WQ4Q-R37X: Remote Code Execution via Sigstore Signature Verification Bypass in uniget CLI

A high-severity logic inversion flaw in the uniget CLI completely bypasses Sigstore cryptographic signature verification on metadata files by default. If an attacker can poison the package metadata cache or repository, they can execute arbitrary OS commands under the privileges of the active user.

Alon Barad
Alon Barad
5 views•5 min read