/

CVE-2026-111663

Severity:

HIGH RISK

(8.6)

SSRF (CWE-918) in Chaskiq GraphQL Upload Handler Flaw

CVE-2026-111663

Deferred

Vulnerability type

Category:

Server-Side Request Forgery

CWE:

CWE-918

Impact:

Unauthorized retrieval of internal and sensitive resources

Severity:

HIGH RISK

(8.6)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Chaskiq contains a server-side request forgery vulnerability in the createUrlUpload GraphQL mutation. An unauthenticated attacker may cause the server to request arbitrary URLs, including internal services or cloud instance metadata endpoints, and retrieve responses through the returned ActiveStorage blob URL.

Chaskiq contains a server-side request forgery vulnerability in the createUrlUpload GraphQL mutation. An unauthenticated attacker may cause the server to request arbitrary URLs, including internal services or cloud instance metadata endpoints, and retrieve responses through the returned ActiveStorage blob URL.

Affected context

The vulnerability occurs in Chaskiq deployments that expose the GraphQL API and allow unauthenticated use of the createUrlUpload mutation. It becomes risky when the application server can make outbound requests to internal networks or cloud metadata services and subsequently exposes fetched content through an accessible ActiveStorage URL.

The vulnerability occurs in Chaskiq deployments that expose the GraphQL API and allow unauthenticated use of the createUrlUpload mutation. It becomes risky when the application server can make outbound requests to internal networks or cloud metadata services and subsequently exposes fetched content through an accessible ActiveStorage URL.

Exploit preconditions

  • Attack surface: Publicly reachable GraphQL API at POST /graphql
  • Required access: No authentication may be required to invoke the vulnerable mutation
  • Trigger point: Processing of the createUrlUpload mutation
  • Target condition: The server must be able to reach the attacker-selected URL
  • Why exploitation is possible: Server-side URL fetching is not sufficiently restricted, and the retrieved response can be accessed through the generated blob URL
  • Attack surface: Publicly reachable GraphQL API at POST /graphql
  • Required access: No authentication may be required to invoke the vulnerable mutation
  • Trigger point: Processing of the createUrlUpload mutation
  • Target condition: The server must be able to reach the attacker-selected URL
  • Why exploitation is possible: Server-side URL fetching is not sufficiently restricted, and the retrieved response can be accessed through the generated blob URL

Why this happens

The underlying issue is server-side request forgery, mapped to CWE-918. The application accepts a user-controlled URL and makes a server-side request without adequately constraining destination hosts, network ranges, protocols, or response exposure. Because the server occupies a more trusted network position than an external client, this behavior may provide access to internal services and sensitive endpoint responses.

The underlying issue is server-side request forgery, mapped to CWE-918. The application accepts a user-controlled URL and makes a server-side request without adequately constraining destination hosts, network ranges, protocols, or response exposure. Because the server occupies a more trusted network position than an external client, this behavior may provide access to internal services and sensitive endpoint responses.

Potential impact

  • Internal services may be queried from the application network
  • Cloud instance metadata and temporary credentials could be exposed
  • Sensitive internal responses may be retrieved through generated blob URLs
  • Network boundaries and access-control assumptions could be bypassed
  • Internal systems may be probed or abused through the application server
  • Internal services may be queried from the application network
  • Cloud instance metadata and temporary credentials could be exposed
  • Sensitive internal responses may be retrieved through generated blob URLs
  • Network boundaries and access-control assumptions could be bypassed
  • Internal systems may be probed or abused through the application server

General mitigation guidance

Mitigation generally focuses on removing unnecessary server-side fetching and reducing trust in user-supplied URLs.

Common defensive patterns include:

  • Allowing only explicitly approved schemes, hosts, and destination ports
  • Applying network-aware allowlists rather than relying only on domain-name checks
  • Blocking loopback, link-local, private, and reserved address ranges after resolution
  • Rechecking resolved addresses to reduce DNS-rebinding exposure
  • Preventing access to cloud metadata services through application and network controls
  • Avoiding public exposure of fetched response bodies and generated object URLs
  • Applying authentication, authorization, rate limits, and least-privilege network egress

Mitigation generally focuses on removing unnecessary server-side fetching and reducing trust in user-supplied URLs.

Common defensive patterns include:

  • Allowing only explicitly approved schemes, hosts, and destination ports
  • Applying network-aware allowlists rather than relying only on domain-name checks
  • Blocking loopback, link-local, private, and reserved address ranges after resolution
  • Rechecking resolved addresses to reduce DNS-rebinding exposure
  • Preventing access to cloud metadata services through application and network controls
  • Avoiding public exposure of fetched response bodies and generated object URLs
  • Applying authentication, authorization, rate limits, and least-privilege network egress

How teams detect issues like this

Detection can include:

  • Static analysis for HTTP clients receiving directly user-controlled URLs
  • Code review checks for URL validation, redirect handling, DNS resolution, and response publishing
  • API tests covering private, loopback, link-local, reserved, and metadata destinations
  • Network monitoring for unexpected outbound requests from application workers
  • Web-application monitoring for unusual GraphQL mutation usage and repeated blob retrievals
  • Policy enforcement that requires approved destination allowlists for server-side fetch features

Automated application-security and API-security review tools may help identify unsafe URL-fetching patterns.

Detection can include:

  • Static analysis for HTTP clients receiving directly user-controlled URLs
  • Code review checks for URL validation, redirect handling, DNS resolution, and response publishing
  • API tests covering private, loopback, link-local, reserved, and metadata destinations
  • Network monitoring for unexpected outbound requests from application workers
  • Web-application monitoring for unusual GraphQL mutation usage and repeated blob retrievals
  • Policy enforcement that requires approved destination allowlists for server-side fetch features

Automated application-security and API-security review tools may help identify unsafe URL-fetching patterns.

Sources

SourceLink
github.comgithub.com/chaskiq/chaskiq/blob/2.0.3/app/controllers/graphql_controller.rb#L3-L33
github.comgithub.com/chaskiq/chaskiq/blob/2.0.3/app/graphql/mutations/create_url_upload.rb#L29-L66
hackmd.iohackmd.io/@hieuPenguinnn/chaskiq-unauthenticated-ssrf-oembed-url-upload
vulncheck.comvulncheck.com/advisories/chaskiq-through-2.0.3-ssrf-via-createurlupload-graphql-mutation

Frequently asked

questions

Yes. The described issue can be reached remotely through the GraphQL endpoint when the vulnerable mutation is available without authentication.

No authenticated account may be necessary. The attacker needs network access to the GraphQL API and the ability to submit the URL-fetching mutation.

Avoid arbitrary server-side URL fetching where possible. If the feature is required, use strict destination allowlists, block internal address ranges and metadata services, validate redirects, and avoid exposing fetched responses broadly.

Treat all user-provided URLs as untrusted, enforce outbound network policy, test private and cloud-specific destinations, apply least privilege, and monitor application egress and unusual API activity.

Yes. The described issue can be reached remotely through the GraphQL endpoint when the vulnerable mutation is available without authentication.

No authenticated account may be necessary. The attacker needs network access to the GraphQL API and the ability to submit the URL-fetching mutation.

Avoid arbitrary server-side URL fetching where possible. If the feature is required, use strict destination allowlists, block internal address ranges and metadata services, validate redirects, and avoid exposing fetched responses broadly.

Treat all user-provided URLs as untrusted, enforce outbound network policy, test private and cloud-specific destinations, apply least privilege, and monitor application egress and unusual API activity.

Find out what's already
exploitable in your codebase.