snac2 JSON 파서 취약점 CVE-2026-112021이란 무엇인가?

snac2 서버의 CVE-2026-112021 취약점은 인증되지 않은 원격 공격자가 조작된 JSON 문자열을 전송하여 서버 크래시 및 서비스 거부(DoS) 상태를 유발하는 치명적인 결함입니다. 특히 JSON 파싱 과정이 ActivityPub 서명 검증보다 먼저 수행되는 구조적 결함 때문에, 기존의 인증 및 서명 체계만으로는 이 공격을 막아내지 못합니다.

CVE-2026-112021 취약점 개요 및 영향

snac2의 JSON 파서에서 발견된 CVE-2026-112021은 힙 버퍼 오버플로우(Heap Buffer Overflow) 취약점으로, CWE-122로 분류됩니다. 이 취약점은 경량 ActivityPub 서버인 snac2의 특정 버전에서 발생하며, 공격자가 서버의 메모리 구조를 손상시켜 서비스 전체를 중단시킬 위험이 있습니다.

해당 취약점의 심각도는 CVSS 점수 8.7로 매우 높게 평가되었습니다. 인증이 필요 없는 원격 공격자가 악용할 수 있다는 점에서 인프라 보안 담당자의 즉각적인 주의가 필요합니다. 영향 범위는 snac2 2.93 미만 버전으로, 해당 버전 이하를 운영 중인 모든 인스턴스는 서비스 거부 위험에 노출되어 있습니다.

취약점의 주요 상세 정보는 다음과 같습니다.

구분 상세 내용
취약점 식별 번호 CVE-2026-112021
영향 버전 snac2 2.93 미만
취약점 유형 힙 버퍼 오버플로우 (CWE-122)
CVSS 점수 8.7
발생 지점 _xs_json_load_lexer() 함수

공격 메커니즘: 서명 검증 전 JSON 파싱

이 취약점이 특히 위험한 이유는 ActivityPub 기반 소셜 네트워크가 일반적으로 사용하는 보안 메커니즘을 완전히 우회하기 때문입니다. 통상적인 ActivityPub 서버는 들어오는 요청의 서명을 검증하여 신뢰할 수 있는 서버의 요청인지 확인합니다. 그러나 snac2는 서명 검증 절차보다 JSON 파싱이 먼저 수행되는 구조적 문제가 있습니다.

공격 프로세스는 다음과 같은 단계로 진행됩니다.

  1. 공격자는 application/activity+json 타입의 조작된 POST 요청을 생성합니다.
  2. 이 요청을 snac2 서버의 activitypub_post_handler()로 전송합니다.
  3. 서버는 수신된 데이터의 서명을 확인하기 전에 _xs_json_load_lexer() 함수로 JSON 파싱을 시도합니다.
  4. 조작된 JSON 문자열이 파싱되는 과정에서 힙 메모리가 손상되어 서버 크래시가 발생합니다.

서버에 인증 체계나 ActivityPub 서명 검증 시스템이 정상적으로 구축되어 운영되고 있더라도, 파싱 단계에서 이미 취약점이 트리거되므로 이러한 방어 기제는 아무런 효력을 발휘하지 못합니다.

PoC 분석 및 RCE 가능성 검토

현재 공개된 개념 증명(PoC) 코드에 따르면, 단순한 서비스 거부를 넘어선 더 고도화된 공격 시도가 확인되었습니다. PoC 코드에는 힙 메모리 관리 체계를 공격하는 ‘tcache poisoning’ 기법이 포함되어 있습니다.

tcache poisoning은 힙 메모리의 할당과 해제 메커니즘을 조작하는 공격 방식입니다. 공격자가 원하는 메모리 주소에 데이터를 쓰게 만듭니다. 이 기법으로 이론적으로 원격 코드 실행(RCE, Remote Code Execution)까지 이어질 가능성이 제기되었습니다. 하지만 현재까지 공개된 정보에 따르면, tcache poisoning 시도가 포함된 코드가 존재할 뿐 실제 RCE 달성까지 입증된 사례는 없습니다.

그럼에도 불구하고 CVSS 8.7이라는 높은 점수는 단순한 서버 다운을 넘어 시스템 권한 탈취로 이어질 수 있는 잠재적 위험성을 반영하고 있으므로, 운영자는 이를 단순한 DoS 취약점으로 치부해서는 안 됩니다.

운영 환경 점검 및 대응 방안

snac2 서버 운영자 및 인프라 보안 담당자는 자신의 인스턴스 버전을 즉시 확인하고 다음과 같은 조치를 취해야 합니다.

  1. 버전 확인 및 패치 검토: 운영 중인 snac2 버전이 2.93 미만인지 확인하시고, 유지관리자의 공식 패치 여부를 살펴보시기 바랍니다.
  2. 요청 로그 분석: activitypub_post_handler()를 통해 들어오는 application/activity+json 타입의 POST 요청 중, 비정상적으로 길거나 특수 문자가 다량 포함된 JSON 페이로드가 있는지 모니터링하십시오.
  3. 메모리 손상 징후 감시: 특별한 이유 없이 서버 프로세스가 반복적으로 재시작되거나, 힙 메모리 관련 세그멘테이션 폴트(Segmentation Fault) 로그가 발생하는지 확인하십시오.

다시 한번 강조하지만, 본 취약점은 서명 검증 이전에 파싱이 이루어지는 설계 결함에 기인하므로, 외부의 서명 검증 레이어에 의존하는 것은 해결책이 되지 못합니다. 반드시 소스 코드 레벨의 파서 수정이나 버전 업데이트로 근본적인 문제를 해결해야 합니다.

댓글 남기기