오늘은 MySQL 관리자라면 반드시 알아야 할 보안 취약점에 대해 이야기해보겠습니다. 바로 CVE-2024-21087 취약점인데요, 이 취약점은 MySQL Server의 Group Replication Plugin에서 발견된 중요한 보안 이슈입니다.

많은 기업에서 MySQL의 Group Replication 기능을 사용해 고가용성 클러스터를 구축하고 있는데, 이번 취약점은 바로 그 핵심 기능에서 발견되어 더욱 주의가 필요합니다.

 

 

1. CVE-2024-21087 취약점의 정확한 정체는?

CVE-2024-21087은 MySQL Server의 Group Replication Plugin 구성 요소에서 발견된 가용성(Availability) 관련 취약점입니다.

취약점의 기본 정보

  • CVSS 3.1 점수: 4.9 (Medium 등급)
  • 영향 받는 버전: MySQL 8.0.36 이하, MySQL 8.3.0 이하
  • 취약점 유형: 서비스 거부(DoS) 공격
  • 발견 시점: 2024년 4월 Oracle Critical Patch Update

이 취약점의 가장 큰 특징은 “쉽게 악용 가능(Easily exploitable)”하다는 점입니다. 높은 권한을 가진 공격자가 네트워크를 통해 여러 프로토콜로 MySQL 서버에 접근할 수 있다면, 서버를 정지시키거나 반복적으로 충돌을 일으킬 수 있습니다.

 

 

2. Group Replication Plugin이 왜 중요한가?

MySQL의 Group Replication Plugin(그룹 복제 플러그인)은 MySQL 8.0부터 본격적으로 도입된 고가용성 솔루션입니다.

Group Replication의 핵심 기능

  • 자동 장애 조치: 마스터 서버가 다운되면 자동으로 새로운 마스터 선출
  • 동기식 복제: 모든 노드에 동시에 데이터 복제
  • 읽기/쓰기 분산: 다중 마스터 모드에서 부하 분산 가능
  • 자동 멤버십 관리: 노드 추가/제거 자동 감지

많은 기업들이 이 기능을 활용해 24/7 무중단 서비스를 구축하고 있는데, 바로 이 핵심 기능에서 취약점이 발견된 것입니다.

 

 

3. 공격 시나리오와 실제 위험도 분석

공격 조건

CVE-2024-21087 취약점을 악용하려면 다음 조건들이 필요합니다:

  1. 높은 권한: 공격자가 MySQL 서버에 대한 높은 권한을 보유해야 함
  2. 네트워크 접근: 네트워크를 통한 MySQL 서버 접근 가능
  3. Group Replication 활성화: 대상 서버에서 Group Replication Plugin이 활성화되어 있어야 함

실제 공격 영향

성공적인 공격 시 발생할 수 있는 피해:

  • 서비스 중단: MySQL 서버가 정지되어 애플리케이션 서비스 전체 마비
  • 반복적 충돌: 서버가 지속적으로 재시작되는 불안정 상태
  • 클러스터 무력화: Group Replication 클러스터 전체가 동작 불능 상태

다행히 이 취약점은 데이터 유출이나 무단 수정은 발생시키지 않습니다. 오직 가용성에만 영향을 미치는 DoS 형태의 공격입니다.

 

 

4. 취약한 버전 확인하는 방법

현재 사용 중인 MySQL 버전이 취약한지 확인해보겠습니다.

MySQL 버전 확인 명령어

SELECT VERSION();
-- 또는
SHOW VARIABLES LIKE 'version';

Group Replication Plugin 상태 확인

-- Plugin 설치 여부 확인
SELECT PLUGIN_NAME, PLUGIN_STATUS 
FROM INFORMATION_SCHEMA.PLUGINS 
WHERE PLUGIN_NAME = 'group_replication';

-- Group Replication 활성화 상태 확인
SHOW VARIABLES LIKE 'group_replication%';

취약 버전 목록

  • MySQL 8.0.36 이하 모든 버전
  • MySQL 8.3.0 이하 모든 버전

만약 위 버전들을 사용하고 있고 Group Replication Plugin이 활성화되어 있다면, 즉시 패치를 적용해야 합니다.

 

 

5. Oracle의 공식 패치 현황

Oracle은 2024년 4월 Critical Patch Update를 통해 이 취약점에 대한 패치를 발표했습니다.

패치가 적용된 버전

  • MySQL 8.0.37 (2024년 4월 30일 릴리스)
  • MySQL 8.4.0 LTS (2024년 4월 30일 릴리스)

패치의 주요 개선사항

MySQL 8.0.37 릴리스 노트에 따르면, Group Replication 관련 여러 보안 개선사항이 포함되었습니다:

  • Group Replication Plugin의 안정성 개선
  • 멤버십 관리 로직 강화
  • 네트워크 통신 보안 강화

 

 

6. 단계별 패치 적용 가이드

6-1. 사전 준비 작업

백업 실시

# 전체 데이터베이스 백업
mysqldump -u root -p --all-databases > mysql_backup_$(date +%Y%m%d).sql

# 설정 파일 백업
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup.$(date +%Y%m%d)

현재 Group Replication 상태 확인

-- 클러스터 멤버 확인
SELECT * FROM performance_schema.replication_group_members;

-- 복제 상태 확인
SHOW REPLICA STATUS\G

6-2. MySQL 8.0.37 업그레이드 방법

Ubuntu/Debian 환경

# MySQL APT Repository 업데이트
sudo apt update

# MySQL 서버 업그레이드
sudo apt upgrade mysql-server

# 버전 확인
mysql --version

CentOS/RHEL 환경

# MySQL Yum Repository 업데이트
sudo yum update mysql-community-server

# 또는 DNF 사용 (RHEL 8+)
sudo dnf update mysql-community-server

수동 설치 방법

# MySQL 8.0.37 다운로드
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz

# 압축 해제 및 설치
tar -xvf mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz
sudo cp -r mysql-8.0.37-linux-glibc2.28-x86_64/* /usr/local/mysql/

6-3. Group Replication 클러스터 업그레이드 순서

Group Replication 환경에서는 순차적 업그레이드가 중요합니다:

  1. Secondary 노드부터 업그레이드
  2. Primary 노드는 마지막에 업그레이드
  3. 각 노드별로 충분한 시간 간격 유지
-- Primary 노드 확인
SELECT MEMBER_HOST, MEMBER_PORT, MEMBER_ROLE 
FROM performance_schema.replication_group_members 
WHERE MEMBER_ROLE = 'PRIMARY';

-- Secondary 노드에서 Group Replication 중지
STOP GROUP_REPLICATION;

-- 업그레이드 후 Group Replication 재시작
START GROUP_REPLICATION;

 

 

7. 패치 적용 후 검증 방법

7-1. 버전 확인

-- MySQL 버전이 8.0.37 이상인지 확인
SELECT VERSION();

-- Group Replication Plugin 버전 확인
SELECT PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_STATUS 
FROM INFORMATION_SCHEMA.PLUGINS 
WHERE PLUGIN_NAME = 'group_replication';

7-2. 클러스터 상태 검증

-- 모든 멤버가 ONLINE 상태인지 확인
SELECT MEMBER_HOST, MEMBER_PORT, MEMBER_STATE, MEMBER_ROLE 
FROM performance_schema.replication_group_members;

-- 복제 지연 확인
SELECT * FROM performance_schema.replication_group_member_stats;

7-3. 보안 테스트

Oracle에서 제공하는 MySQL Enterprise Security 도구를 활용하거나, 보안 스캔 도구로 취약점 해결 여부를 확인할 수 있습니다.

 

 

8. 임시 완화 방법 (패치 적용 전)

즉시 패치를 적용할 수 없는 환경에서는 다음과 같은 임시 완화 조치를 고려할 수 있습니다:

8-1. 네트워크 접근 제한

# 방화벽 설정으로 MySQL 포트 접근 제한
sudo ufw allow from 192.168.1.0/24 to any port 3306
sudo ufw deny 3306

# Group Replication 포트도 제한 (기본 33061)
sudo ufw allow from 192.168.1.0/24 to any port 33061
sudo ufw deny 33061

8-2. 권한 관리 강화

-- 불필요한 높은 권한 사용자 제거
SELECT User, Host FROM mysql.user WHERE Super_priv = 'Y';

-- Group Replication 관련 권한 최소화
REVOKE ALL PRIVILEGES ON *.* FROM 'unnecessary_user'@'%';

8-3. 모니터링 강화

-- 의심스러운 접속 모니터링
SELECT * FROM performance_schema.events_statements_history 
WHERE SQL_TEXT LIKE '%GROUP_REPLICATION%';

 

 

9. 클라우드 환경별 대응 방안

9-1. Amazon RDS for MySQL

AWS에서는 Aurora MySQL 버전 3.07.0, 3.06.0, 3.05.2 등에서 해당 CVE가 수정되었습니다.

9-2. Google Cloud SQL

Google Cloud SQL for MySQL은 자동으로 보안 패치가 적용되지만, 수동으로 메이저 버전 업그레이드가 필요할 수 있습니다.

9-3. Azure Database for MySQL

Microsoft Azure는 Flexible Server에서 MySQL 8.0.37 버전을 지원하며, 자동 패치 업데이트를 제공합니다.

 

 

댓글 남기기