Home/CVE/A vulnerability was found in mod_wsgi. The X-Client-IP header is not removed from a request from an untrusted proxy, all
CVE
↯ PDF report

CVE-2022-22554

A vulnerability was found in mod_wsgi. The X-Client-IP header is not removed from a request from an untrusted proxy, all

A vulnerability was found in mod_wsgi. The X-Client-IP header is not removed from a request from an untrusted proxy, allowing an attacker to pass the X-Client-IP header to the target WSGI application because the condition to remove it is missing.

HIGH · CVSS 7.5 EPSS 0.00665
EPSS exploitation odds0.66% · top 53%
Act now
  • Public exploit or PoC is available
  • CVSS base score ≥ 7.0
Look this up elsewhere - one-click external pivots
How to read a CVE - triage first, then detect and patch
This page is every public fact about CVE-2022-2255, cross-linked. Its job is to answer one question fast - does this need my attention now? - and then hand you the two things you do about it. Here is how an analyst reads it.
Triage: should I act now? Four signals, and they are not interchangeable:
CVSSseverity - how bad it is IF exploited, 0-10. A high CVSS alone is not urgency; a flaw can be a perfect 10 and never actually be attacked. EPSSprobability - a model’s estimate of the chance it is exploited in the next 30 days, 0-1. This is the “will it actually happen” signal. CISA KEVconfirmed - it is being exploited in the wild right now. The strongest signal on the page; KEV beats any score. Weaponisedavailability - public exploits / PoCs, and especially Metasploit modules rated Excellent / Great. Reliable, packaged exploit code means low-skill attackers can use it today.
How they combine: KEV, or a dependable Metasploit module, means patch now regardless of CVSS. High CVSS + low EPSS + no exploit is real but not an emergency - schedule it. Low CVSS but KEV-listed still gets patched now. The verdict above already weighed these for you; this is how it got there.
Then what - two workflows:
Detectwhen you cannot patch today, follow this CVE to the ATT&CK techniques it enables, then Build a SIEM detection (the green button) - author a rule, test it in Atomic, deploy it. That buys visibility while the patch waits. PatchAffected products / packages tell you if you are exposed; Fixed versions by distribution and Vendor advisories give the exact version that closes it.
Reading order for the panels below: verdict + badges, then Public exploits / Metasploit (is it weaponised), then ATT&CK techniques + Sigma / IDS rules (can I detect it), then Affected products / packages + Fixed versions (am I exposed, what patches it), then Threat actors / IOCs (who uses it), then Scoring & timeline / references (the evidence).

Severity & exploitation scoring

View on NVD →
CVSS base score
7.5
HIGHCVSS v3.1 · [email protected]
EPSS exploitation probability
0.66%
Top 53%odds of exploitation in the next 30 days
CVSS metric silhouette
VectorComplexityPrivilegesInteractionScopeConfidentialityIntegrityAvailability
shape grows toward worst-case
SSVC triage
No SSVC vulnrichment for this CVE. CISA's Vulnrichment program scores newer CVEs (~2024 onwards) plus selected older critical ones. Use the EPSS probability + KEV status to triage instead.
CVSS vector breakdown
Exploitability - how they get in
Attack Vector
Network Adjacent Local Physical
Attack Complexity
Low High
Privileges Required
None Low High
User Interaction
None Required
Scope
Unchanged Changed
Impact - what breaks
Confidentiality
None Low High
Integrity
None Low High
Availability
None Low High
VECTORCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
Lifecycle
  1. 25 Aug 2022Published to NVD
  2. 17 Jun 2026Last modified
Every entry is a recorded date - NVD publish/modify, CISA KEV add, public exploit disclosure. No inferred events.
Attack path
Full kill chain

Public Exploits & PoCs

4
These PoC and exploit links come from public sources and are not verified to be safe or functional. Review the code before running anything, and treat unverified entries as untrusted. Signed-in users mark whether it works, rate 1-10, and can report malware with a required reason that becomes a public comment.
poc Public PoC (nvd-reference) date unknown
Vote & rate
Report or claim
⚠ Report this PoC

Becomes a public comment attributed as First L. (never full last name). Don't include private info. Rate-limited: 5/hour.

Works? no reports yet
Rating -
poc Public PoC (nvd-reference) date unknown
Vote & rate
Report or claim
⚠ Report this PoC

Becomes a public comment attributed as First L. (never full last name). Don't include private info. Rate-limited: 5/hour.

Works? no reports yet
Rating -
poc github.com · mod_wsgi.c#L13940-L13941 github.com
Vote & rate
Report or claim
⚠ Report this PoC

Becomes a public comment attributed as First L. (never full last name). Don't include private info. Rate-limited: 5/hour.

Works? no reports yet
Rating -
poc github.com · mod_wsgi.c#L14046-L14082 github.com
Vote & rate
Report or claim
⚠ Report this PoC

Becomes a public comment attributed as First L. (never full last name). Don't include private info. Rate-limited: 5/hour.

Works? no reports yet
Rating -

ATT&CK techniques

2

Techniques this CVE enables. Pills with a solid outline are high confidence - named directly in ATT&CK or Nuclei, or human-curated by CTID; the rest are inferred from the weakness type using MITRE's CVE Mapping Methodology and the CWE → CAPEC chain. Broad, generic-weakness guesses are filtered out. A small marks a technique that N independent sources agree on.

▤ Build a SIEM detection for these techniques

Affected Products & Versions

2
debian linuxall versions

Affected Packages

1
Language-ecosystem packages (from OSV) tied to this CVE, with the version that fixes it - the dependency-level detail NVD doesn’t carry.
PyPI mod-wsgi HIGH fixed in 4.9.3
📦

Fixed versions by distribution

70
The package version that resolves this CVE on each Linux distribution, from the vendor’s published security data. fixed in shows a patched version exists; open means the package is listed as affected with no fix yet.
oracle allpython39 open
oracle allpython39-PyMySQL fixed in 0:0.10.1-2.module+el8.9.0+90016+9c2d6573
oracle allpython39-cffi open
oracle allpython39-chardet open
oracle allpython39-cryptography fixed in 0:3.3.1-3.0.1.module+el8.10.0+90269+2fa22b99
oracle allpython39-devel open
oracle allpython39-idle fixed in 0:3.9.20-1.module+el8.10.0+90419+54594e05
oracle allpython39-idna open
oracle allpython39-libs fixed in 0:3.9.20-1.module+el8.10.0+90419+54594e05
oracle allpython39-lxml open
oracle allpython39-mod_wsgi fixed in 0:4.7.1-7.module+el8.10.0+90570+e9e3ed00.1
oracle allpython39-numpy fixed in 0:1.19.4-3.module+el8.9.0+90016+9c2d6573
oracle allpython39-numpy-f2py fixed in 0:1.19.4-3.module+el8.9.0+90016+9c2d6573
oracle allpython39-pip open
oracle allpython39-pip-wheel fixed in 0:20.2.4-9.module+el8.10.0+90269+2fa22b99
oracle allpython39-ply fixed in 0:3.11-10.module+el8.9.0+90016+9c2d6573
oracle allpython39-psutil fixed in 0:5.8.0-4.module+el8.9.0+90016+9c2d6573
oracle allpython39-psycopg2 fixed in 0:2.8.6-3.module+el8.10.0+90269+2fa22b99
oracle allpython39-psycopg2-tests open
oracle allpython39-pycparser open
oracle allpython39-pysocks fixed in 0:1.7.1-4.module+el8.9.0+90016+9c2d6573
oracle allpython39-pyyaml open
oracle allpython39-requests open
oracle allpython39-rpm-macros open
oracle allpython39-scipy fixed in 0:1.5.4-5.module+el8.9.0+90016+9c2d6573
oracle allpython39-setuptools open
oracle allpython39-setuptools-wheel fixed in 0:50.3.2-6.module+el8.10.0+90395+b6c4aad1
oracle allpython39-six fixed in 0:1.15.0-3.module+el8.9.0+90016+9c2d6573
oracle allpython39-test fixed in 0:3.9.20-1.module+el8.10.0+90419+54594e05
oracle allpython39-tkinter open
oracle allpython39-toml fixed in 0:0.10.1-5.module+el8.9.0+90016+9c2d6573
oracle allpython39-urllib3 fixed in 0:1.25.10-5.module+el8.10.0+90269+2fa22b99
oracle allpython39-wheel fixed in 1:0.35.1-4.module+el8.9.0+90016+9c2d6573
oracle allpython39-wheel-wheel open
rhel 8python39 open
rhel 8python39-PyMySQL fixed in 0:0.10.1-2.module+el8.9.0+19644+d68f775d
rhel 8python39-cffi fixed in 0:1.14.3-2.module+el8.9.0+19644+d68f775d
rhel 8python39-chardet open
rhel 8python39-cryptography open
rhel 8python39-devel open
rhel 8python39-idle fixed in 0:3.9.20-1.module+el8.10.0+22342+478c159e
rhel 8python39-idna open
rhel 8python39-libs fixed in 0:3.9.20-1.module+el8.10.0+22342+478c159e
rhel 8python39-lxml fixed in 0:4.6.5-1.module+el8.9.0+19644+d68f775d
rhel 8python39-mod_wsgi fixed in 0:4.7.1-7.module+el8.10.0+23075+0aa18782.1
rhel 8python39-numpy fixed in 0:1.19.4-3.module+el8.9.0+19644+d68f775d
rhel 8python39-numpy-f2py open
rhel 8python39-pip open
rhel 8python39-pip-wheel fixed in 0:20.2.4-9.module+el8.10.0+21329+8d76b841
rhel 8python39-ply open
rhel 8python39-psutil open
rhel 8python39-psycopg2 fixed in 0:2.8.6-3.module+el8.10.0+21142+453d2b75
rhel 8python39-psycopg2-tests open
rhel 8python39-pycparser fixed in 0:2.20-3.module+el8.9.0+19644+d68f775d
rhel 8python39-pysocks fixed in 0:1.7.1-4.module+el8.9.0+19644+d68f775d
rhel 8python39-pyyaml open
rhel 8python39-requests open
rhel 8python39-rpm-macros open
rhel 8python39-scipy fixed in 0:1.5.4-5.module+el8.9.0+19644+d68f775d
rhel 8python39-setuptools open
rhel 8python39-setuptools-wheel open
rhel 8python39-six open
rhel 8python39-test open
rhel 8python39-tkinter fixed in 0:3.9.20-1.module+el8.10.0+22342+478c159e
rhel 8python39-toml open
rhel 8python39-urllib3 open
rhel 8python39-wheel fixed in 1:0.35.1-4.module+el8.9.0+19644+d68f775d
rhel 8python39-wheel-wheel open
suse sle15apache2-mod_wsgi fixed in 0:4.7.1-150400.3.3.1
suse sle15apache2-mod_wsgi-python3 fixed in 0:4.5.18-150000.4.6.1

Vendor Advisories

7
rhsaRHSA-2025:4791Moderate
🔗

References & Sources

2
Source URLs (vendor pages, mailing lists, write-ups). Exploit/PoC links are in their own section above to avoid duplication.