mediumCVSS 6.3Vulnerability

GHSA-5p3m-vhh6-9236

### Summary Stigmem allows an authenticated user to create a webhook subscription with a user-controlled `delivery_address`. That value is stored and later used directly by the subscription delivery worker as the destination of a server-side HTTP POST request. The codebase already contains an outbound SSRF guard, `assert_safe_url()`, which blocks loopback, private, link-local, and metadata-style destinations. However, the subscription webhook delivery path does not appear to apply this guard either when the subscription is created or immediately before delivery. As a result, an authenticated user can configure a webhook destination such as `http://127.0.0.1:9999/ssrf`, trigger a matching fact-change event, and cause the Stigmem server to issue a server-side HTTP request to an internal loopback address. ### Details Relevant files: ```text node/src/stigmem_node/routes/subscriptions.py node/src/stigmem_node/subscription_delivery.py node/src/stigmem_node/models/subscriptions.py node/src/stigmem_node/utility/net_util.py SubscriptionCreateRequest accepts delivery_address as a plain string and validates only that it has a minimum length: class SubscriptionCreateRequest(BaseModel): target: str = Field(..., min_length=1) on_change: str = Field(...) delivery_address: str = Field(..., min_length=1) The create route persists this value directly: conn.execute( """INSERT INTO subscriptions (id, subscriber_identity, target, target_kind, on_change, delivery_address, idempotency_key, created_at, tenant_id) VALUES (?,?,?,?,?,?,?,?,?)""", ( sub_id, identity.entity_uri, req.target, target_kind, req.on_change, req.delivery_address, req.idempotency_key, now, identity.tenant_id, ), ) The delivery worker later sends a server-side request to the stored value: with httpx.Client(timeout=10.0) as client: resp = client.post( event["delivery_address"],

Properties

ghsa_id
GHSA-5p3m-vhh6-9236
severity
medium
summary
stigmem-node has blind SSRF via unvalidated webhook subscription delivery_address
cvss_score
6.3
cve_id
GHSA-5p3m-vhh6-9236
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
is_ghsa_only
true
ghsa_published
2026-08-20T18:30:50Z
source_url
https://github.com/advisories/GHSA-5p3m-vhh6-9236
ghsa_updated
2026-08-20T18:30:52Z

Related Entities (5)

HAS_WEAKNESS (2)

[Weakness]Improper Input Validation
[Weakness]Server-Side Request Forgery (SSRF)

REPORTED_BY (1)

[Source]GitHub Advisory Database

VULNERABLE_TO (1)

[Software]pip/stigmem-node

AFFECTS (1)

[Software]pip/stigmem-node

Explore deeper with Ninja Signal's threat intelligence graph

GHSA-5p3m-vhh6-9236 (CVSS 6.3) — Ninja Signal Threat Intelligence | Ninja Signal