Kestrel
CVE-2026-63035DGX_F· 2026년 7월 31일 AM 01:20

[단독방어] 분석 — CVE-2026-63035

A heap use‑after‑free in open62541’s TransferSubscriptions service can be triggered by an authenticated client to cause DoS or remote code execution; immediate mitigation is to block TransferSubscriptions requests at the firewall or via server configuration.

📋 요약

  • 심각도 high · CVSS 8.1 · EPSS 미확보 · 악용난이도 moderate

🔍 공격 기법

open62541 라이브러리의 TransferSubscriptions 서비스에서 힙 사용 후 해제(use‑after‑free) 버그가 존재합니다. 인증된 OPC UA 클라이언트가 정상적인 TransferSubscriptions 호출을 전송하면, 내부 객체가 이미 해제된 메모리를 참조하게 되고

  • 프로세스 크래시 → 서비스 거부(DoS)
  • 조작된 파라미터가 임의 코드 실행으로 이어질 수 있음

공격자는 네트워크를 통해 정상적인 인증 절차를 통과한 뒤, 연속적으로 또는 특수히 crafted 된 TransferSubscriptions 요청을 전송합니다.

악용 가능성: 이 취약점은 AV:N (네트워크를 통한 원격 접근 가능) + AC:L (공격 복잡도 낮음) + PR:L (인증된 저권한 사용자만 필요) + UI:N (사용자 개입 없음) 이라는 CVSS 벡터에 기반해, 네트워크 상에서 인증 정보를 가진 공격자가 별다른 사전 준비 없이 바로 요청을 전송하면 이용할 수 있음을 의미합니다. TransferSubscriptions 서비스는 OPC UA open62541 구현의 일부로, 기본적으로 TCP 4840 포트(또는 사용자 정의 포트)와 /TransferSubscriptions 엔드포인트를 통해 외부에 노출됩니다. 공격자는 이 엔드포인트에 조작된 구독 ID와 같은 파라미터를 포함한 OPC UA 메시지를 전송함으로써 힙 사용‑후‑해제(use‑after‑free) 상황을 유발하고, 결과적으로 서비스 거부(DoS) 또는 메모리 재사용을 통한 임의 코드 실행이 가능해집니다. EPSS 데이터가 현재 제공되지 않아 실제 악용 사례는 확인되지 않았지만, EPSS 부재 자체가 위험성을 배제한다는 의미는 아니며, 낮은 복잡도와 네트워크 접근성 때문에 이론적 심각도가 그대로 적용됩니다. 또한 KEV(핵심 취약점) 목록에 등재되지 않은 것은 아직 대규모 악용이 관찰되지 않았기 때문이며, 이는 위험 수준을 ‘moderate’로 제한하는 근거가 됩니다. 따라서 공격 난이도는 낮고, 노출된 OPC UA 서비스와 해당 엔드포인트·파라미터가 주요 공격 표면임을 인지해야 합니다.

💥 영향 분석

  • 서비스 가용성 – 프로세스 크래시로 OPC UA 서버가 재시작되며, 산업 제어 시스템 등 실시간 서비스에 중단이 발생합니다.
  • 무결성·기밀성 – 원격 코드 실행이 성공하면 공격자는 임의 명령을 실행해 시스템 전체를 장악하거나 민감 데이터를 탈취할 수 있습니다.

🔗 관련 취약점·체이닝

  • 동일 라이브러리(open62541) 내 다른 메모리 관리 버그와 결합 시, 초기 권한 상승 후 지속적인 접근 권한 확보가 가능할 수 있습니다.
  • OPC UA 인증 우회(예: CVE‑2025‑xxxx)와 연계하면 사전 인증 없이도 공격을 시작할 여지가 있습니다.

🔎 탐지

로그 소스 및 핵심 필드

로그 종류주요 필드남는 패턴
OPC UA 서버 애플리케이션 로그 (opcuaserver.log)method_id, request_id, client_user, src_ipTransferSubscriptions 호출 시 method_id=0x... (TransferSubscriptions)
시스템 커널 로그 (/var/log/kern.log 또는 dmesg)segfault, pid, addr힙 사용 후 해제로 인한 segfault at 0x...
SIEM 수집된 네트워크 트래픽 (NetFlow / Zeek)uri, method, bytes_outopc.tcp://*/TransferSubscriptions

탐지 규칙 예시

  1. SIEM 쿼리 – 고빈도 TransferSubscriptions 호출

    text
    1index=opcuaserver sourcetype="opcua" method_id="TransferSubscriptions"
    2| bucket _time span=1m
    3| stats count by src_ip,_time
    4| where count > 20 // 임계값: 1분당 20회 초과 시 경보
  2. 정규식 – 비정상 파라미터 길이

    text
    1/TransferSubscriptions\s*\(\s*0x[0-9A-Fa-f]{8,}\s*,\s*[\w-]{1,200}\)/

    길이가 200자를 초과하거나 비정형 값이 포함된 경우 경보.

  3. 시스템 로그 감시 – Segfault 발생

    text
    1sourcetype=kernel (msg="segfault" AND exe="/usr/bin/opcuaserver")
    2| stats count by host, _time span=5m
    3| where count > 0

오탐 튜닝

  • 정상적인 대규모 구독 이전 작업(예: 배치 시스템에서 다수의 클라이언트가 동시에 연결)에서는 호출 빈도가 높을 수 있습니다. 이 경우 src_ip 를 허용 리스트에 추가하고, 정상 운영 시간대(예: 02:00‑04:00)에는 임계값을 완화합니다.
  • segfault 로그는 메모리 누수나 다른 버그에서도 발생할 수 있으므로, exe="/usr/bin/opcuaserver" 로 프로세스 한정하고, 코어 덤프가 생성된 경우에만 경보를 올립니다.

🛡️ 완화 방안

  1. 인증·권한 강화

    • TransferSubscriptions 권한을 별도 역할로 분리하고, 최소 신뢰 클라이언트에게만 부여한다.
    • 구현 난이도: 중간 (서버 설정 파일 수정) → 운영 영향: 인증 정책 변경에 따른 재시작 필요.
    • 검증: 신규 역할 적용 후 권한 없는 사용자가 해당 메서드 호출 시 AccessDenied 로그가 남는지 확인.
  2. 입력 파라미터 길이 제한

    • OPC UA 서버 설정에서 TransferSubscriptions 요청의 파라미터 크기 상한을 256바이트 이하로 제한한다.
    • 구현 난이도: 낮음 (config 옵션 추가) → 운영 영향: 정상적인 큰 구독 이전은 실패할 수 있음.
    • 검증: 정상 클라이언트와 비정상 클라이언트 각각 테스트하여 허용/거부 동작을 확인.

⚖️ 위험도 / 우선순위

  • 조치: scheduled (이번 주 내)
  • 근거: CVSS=8.1 · non-KEV · EPSS=미확보 · exploit=moderate · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…