CVE-2026-46556
Python vulnerability analysis and mitigation

Overview

CVE-2026-46556 is a Server-Side Request Forgery (SSRF) vulnerability in FlaskBB's get_image_info() function, triggered via an unrestricted avatar URL input. It affects all versions of FlaskBB up to and including 2.2.0, and allows any authenticated user to force the server to issue arbitrary HTTP requests to internal endpoints, including cloud metadata services such as AWS IMDSv1 (169.254.169.254). The vulnerability was published on May 19, 2026, and added to the GitHub Advisory Database on May 21, 2026. It carries a CVSS v3.1 base score of 6.5 (Medium) (GitHub Advisory, FlaskBB Advisory).

Technical details

The root cause is CWE-918 (Server-Side Request Forgery): in flaskbb/utils/helpers.py at line 571, the url parameter supplied by the user is passed directly to requests.get(url, stream=True) without any validation of scheme, host, or IP address. The attack chain begins when an authenticated user submits a malicious URL as their avatar via POST /user/settings/user-details; this triggers ValidateAvatarURL.validate() in validators.py:103, which calls check_image() in helpers.py:628, which in turn calls get_image_info(url) — ultimately issuing an unrestricted outbound HTTP GET request. Three exploitation channels are confirmed: direct server-side requests to internal endpoints, internal port scanning via distinct error codes (CONN_REFUSED, NO_CONTENT_LENGTH, TYPE_NOT_ALLOWED, SUCCESS), and triggering of internal APIs (e.g., Elasticsearch on 127.0.0.1:9200). A proof-of-concept archive (submit.zip) has been publicly released (GitHub Advisory, FlaskBB Advisory).

Impact

Successful exploitation primarily impacts confidentiality (CVSS Confidentiality: High), with no direct integrity or availability impact. Any authenticated FlaskBB user can leverage this vulnerability to exfiltrate cloud IAM credentials from metadata services (AWS, GCP, Azure), map internal network topology via port scanning, and interact with unauthenticated internal services such as Elasticsearch, etcd, Consul, or CI/CD webhook endpoints. On cloud-hosted deployments, leaked IAM credentials could enable lateral movement to other cloud resources and services beyond the FlaskBB instance itself (GitHub Advisory, FlaskBB Advisory).

Exploitation steps

  1. Obtain authenticated access: Register or log in to a FlaskBB instance running version ≤ 2.2.0 with any standard user account.
  2. Navigate to the avatar settings: Go to Settings → User Details (endpoint: POST /user/settings/user-details).
  3. Inject a malicious URL: In the avatar URL field, enter an internal target such as http://169.254.169.254/latest/meta-data/ (AWS IMDSv1) or http://127.0.0.1:9200/_cat/indices (Elasticsearch).
  4. Submit the form: The server processes the avatar URL through ValidateAvatarURL.validate()check_image()get_image_info()requests.get(url), issuing a GET request to the attacker-specified internal endpoint.
  5. Infer internal topology via error codes: Observe distinct response behaviors (CONN_REFUSED, NO_CONTENT_LENGTH, TYPE_NOT_ALLOWED, SUCCESS) to map open ports and reachable services on the internal network.
  6. Exfiltrate cloud credentials: If the server is hosted on AWS/GCP/Azure, the metadata endpoint returns IAM role credentials, which can be used to authenticate to cloud APIs for lateral movement (GitHub Advisory, FlaskBB Advisory).

Indicators of compromise

  • Network: Outbound HTTP GET requests from the FlaskBB server process to 169.254.169.254, 169.254.170.2, metadata.google.internal, or 169.254.169.254 (cloud metadata IPs); connections to loopback (127.0.0.1) or RFC-1918 addresses on non-standard ports (e.g., 9200, 2379, 8500).
  • Logs: Web server access logs showing POST /user/settings/user-details or POST /admin/users/<id>/edit with avatar URL values containing internal IP ranges or metadata service hostnames; application logs showing requests.get() calls to internal addresses.
  • Application Behavior: Repeated avatar URL submissions with varying IP addresses or port numbers in rapid succession, consistent with automated internal port scanning; error patterns in FlaskBB logs matching CONN_REFUSED or TYPE_NOT_ALLOWED for internal hosts.

Mitigation and workarounds

As of the advisory publication date (May 21, 2026), no patched version of FlaskBB has been released — the advisory lists "None" for patched versions, and all versions ≤ 2.2.0 are affected. Administrators should implement the following mitigations until an official patch is available: (1) restrict outbound HTTP requests from the FlaskBB server using firewall rules or egress filtering to block access to RFC-1918 addresses and cloud metadata IPs (169.254.169.254); (2) deploy an SSRF-aware proxy (e.g., using ssrf-proxy or network-level controls) to intercept and validate outbound requests; (3) consider disabling avatar URL functionality if not required. Monitor the FlaskBB repository for patch releases (GitHub Advisory, FlaskBB Advisory).

Community reactions

The vulnerability was reported by three researchers: woohyunchoi-kentech, programsurf, and yoonsh, and was published by the FlaskBB maintainer (sh4nks) via GitHub's security advisory process. A Loginsoft blog post on Medium referenced the vulnerability in the context of expanding enterprise attack surfaces from trusted software (Loginsoft Medium). No broader media coverage or significant social media discussion has been identified beyond the advisory and aggregator listings.

Additional resources


SourceThis report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-47708CRITICAL9.3
  • Python logoPython
  • stata-mcp
NoYesJul 21, 2026
CVE-2026-47731CRITICAL9.1
  • Python logoPython
  • ait-core
NoYesJul 21, 2026
CVE-2026-63764HIGH7.7
  • Python logoPython
  • lmdeploy
NoNoJul 21, 2026
GHSA-rwj8-pgh3-r573HIGH7.5
  • Python logoPython
  • gitpython
NoYesJul 21, 2026
CVE-2026-46556MEDIUM6.5
  • Python logoPython
  • flaskbb
NoNoJul 21, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management