Skip to content
KitploitKITPLOIT
도구블로그
Log in
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-52134-libiec61850 — libiec61850 v1.6의 GOOSE 재생 처리에 영향을 주는 CVE-2026-52134에 대한 공개 기술 권고 및 재현 증거 | Kitploit
도구/GitHubGitHub/if-forget/cve-2026-52134-libiec61850
Vulnerability AnalysisSCADA/ICS SecurityNetwork SecurityLearning & EducationCurated ResourcesLabs & Practice
GitHubif-forget/cve-2026-52134-libiec61850

CVE-2026-52134-libiec61850

libiec61850 v1.6의 GOOSE 재생 처리에 영향을 주는 CVE-2026-52134에 대한 공개 기술 권고 및 재현 증거

저장소 보기
172개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-52134: libiec61850 v1.6의 GOOSE 재생 및 메시지 신선도 처리

상태

CVE-2026-52134이(가) 배정되었습니다. 해당 CVE 레코드의 공개는 보류 중입니다.

영향받는 제품

  • 공급업체: MZ Automation GmbH
  • 제품: libiec61850
  • 테스트한 버전: 1.6
  • 다른 버전의 상태: 확인되지 않음
  • 영향받는 파일: src/goose/goose_receiver.c
  • 영향받는 함수: parseGoosePayload()

요약

libiec61850 v1.6의 GOOSE 구독자 수신 경로는 구독자에게 보이는 상태를 업데이트하고 등록된 리스너 콜백을 호출하기 전에 특정 재생 또는 오래된 GOOSE 메시지를 적절히 거부하지 않습니다.

두 가지 통제된 실험이 동일한 수신 경로에서 관련 동작을 보여줍니다:

  1. 낮은 stNum 롤백: 구독자가 stNum=2를 처리한 후, 이전에 캡처한 stNum=1 프레임을 재생하면 리스너가 이전 상태와 데이터를 다시 보고했습니다.
  2. 비증가 sqNum 재생: 동일한 stNum을 가지지만 더 오래된 sqNum을 가진 이전에 캡처한 프레임이 재생되었을 때, 해당 프레임은 유효하지 않음으로 표시되었지만 리스너 콜백은 계속 발생했고 재생된 데이터는 계속 표시되었습니다.

이는 두 개의 별도 CVE가 아니라 하나의 재생/메시지 신선도 처리 문제에 대한 두 가지 관련 관찰 결과로 제시됩니다.

공격 전제 조건

공격자는 다음을 할 수 있어야 합니다:

  • 관련 IEEE 802.3 레이어 2 브로드캐스트 도메인 또는 VLAN에 접근
  • 합법적인 GOOSE 이더넷 프레임 캡처
  • EtherType 0x88B8을 사용하여 이더넷 프레임 주입

이는 임의의 인터넷 기반 원격 공격이 아닙니다.

기술적 근거

관련 수신 로직은 수신된 stNum이 저장된 stNum과 같을 때 sqNum을 확인합니다. 테스트된 코드 경로는 구독자 상태가 업데이트되고 리스너가 호출되기 전에 더 낮은 stNum을 거부하지 않습니다.

테스트된 라이브러리 파일은 수정되지 않았습니다. src/goose/goose_receiver.c의 원본과 작업 복사본은 동일한 SHA-256 값을 가졌습니다:

c42f2aec80f605c458d0bca524ccb09f2e35f9b83a02f854f95d9444616c075b

소스 무결성 검사

테스트 환경

  • Ubuntu 20.04.6 LTS
  • libiec61850 v1.6
  • Linux veth0 / veth1 격리된 가상 이더넷 페어
  • tcpdump
  • TShark
  • Python 3 및 Scapy
  • 테스트 하네스로만 사용된 수정된 예제 퍼블리셔 및 구독자

테스트 하네스는 통제된 상태 전이를 생성하고 콜백에서 볼 수 있는 stNum, sqNum, 유효성 및 데이터 값을 출력했습니다. 취약한 라이브러리 파일 자체는 수정되지 않았습니다.

실험 A: 낮은 stNum 롤백

기준

통제된 퍼블리셔가 두 가지 상태를 전송했습니다:

State A: stNum=1, sqNum=0, data=1111
State B: stNum=2, sqNum=0, data=2222

기준 패킷 캡처에는 이 순서대로 두 개의 GOOSE 프레임이 포함되어 있었습니다:

Frame 1: stNum=1, sqNum=0
Frame 2: stNum=2, sqNum=0

기준 필드 및 콜백

구독자 출력에는 State B 이전에 valid=false로 표시된 stNum=1, sqNum=0에 대한 보조 콜백도 포함되어 있었습니다. 이 보조 콜백은 증거 자료에 포함되어 있지만 롤백 결론의 근거로 사용되지는 않습니다. 재생 전 결정적 상태는 stNum=2와 데이터 값 2222를 포함한 이후의 콜백이었습니다.

단일 재생

재생 스크립트는 두 프레임 기준 캡처를 로드하고 프레임 1을 선택한 후 이를 veth0을 통해 한 번 전송했습니다.

재생 직전에 리스너는 다음을 보고했습니다:

stNum=2, sqNum=0, valid=true, allData={2222}

이전 프레임이 한 번 재생된 후 리스너는 다음을 보고했습니다:

stNum=1, sqNum=0, valid=true, allData={1111}

단일 재생 및 stNum 롤백

이는 이전에 캡처한 더 낮은 stNum 프레임을 재생한 후 stNum=2에서 stNum=1로의 구독자 상태 롤백이 관찰되었음을 보여줍니다.

추가 동일 재생

동일한 이전 프레임의 사본 4개가 더 전송되었습니다. 네 개 모두 stNum=1, sqNum=0을 포함했습니다.

이후의 사본들은 valid=false로 보고되었지만 콜백 번호는 계속 증가했고 재생된 데이터는 계속 표시되었습니다:

중복 재생은 여전히 콜백을 발생시킴

이 보조 관찰 결과는 반복된 프레임을 유효하지 않음으로 표시해도 테스트된 수신 경로에서 리스너 전달을 막지 못한다는 것을 보여줍니다.

실험 B: 비증가 sqNum 재생

이전 재현에서는 공식 예제 퍼블리셔와 구독자를 사용했습니다. 퍼블리셔는 다음의 정상적인 시퀀스를 생성했습니다:

stNum=1
sqNum=0, 1, 2, 3

그런 다음 구독자가 이후의 시퀀스 값을 이미 처리한 후 첫 번째 캡처 프레임(stNum=1, sqNum=0)이 재생되었습니다.

원본 sqNum 기준

수신된 sqNum=0이 저장된 시퀀스 값보다 새롭지 않았기 때문에 재생된 사본들은 유효하지 않음으로 보고되었습니다. 그러나 구독자는 재생된 데이터를 포함한 리스너 이벤트를 계속 출력했습니다:

원본 sqNum 재생 콜백

이 실험은 더 제한적이지만 관련된 관찰 결과를 뒷받침합니다:

  • 동일 상태 재생은 유효성 플래그를 통해 탐지되었습니다.
  • 탐지가 테스트된 예제에서 재생 메시지의 콜백 전달을 막지는 못했습니다.

원본 재생의 원시 스크린샷은 보조 자료로 보존됩니다:

  • 12-original-sqnum-replay-command-raw.png
  • 13-original-sqnum-replay-terminal-raw.png

이 원시 이미지에는 관련 없는 Scapy 선택적 모듈 가져오기 경고가 포함되어 있습니다. 경고는 스크립트가 캡처된 GOOSE 프레임을 보고하고 전송을 완료하는 것을 막지 못했지만, 기술적 결과를 검토할 때에는 위의 더 깔끔한 스크린샷이 선호됩니다.

두 실험 간의 관계

실험은 동일한 GOOSE 재생/메시지 신선도 문제의 서로 다른 분기를 보여줍니다:

관찰수신 메시지관찰된 결과
낮은 stNum 재생저장된 stNum=2; 이전 stNum=1 수신이전 상태와 데이터가 리스너에게 전달되었고 테스트 실행에서 유효한 것으로 보고됨
비증가 sqNum 재생동일한 stNum; 더 오래되거나 중복된 sqNum 수신메시지가 유효하지 않음으로 보고되었지만 리스너 콜백과 재생 데이터 전달은 계속됨

첫 번째 관찰 결과는 최신 상태에서 이전 상태로의 롤백을 보여주기 때문에 주요 CVE 발견 사항입니다. 두 번째 관찰 결과는 유효하지 않은 동일 상태 재생이 리스너 경로를 통해 계속 전달되는 방식에 대한 지원 증거입니다.

관찰된 영향

시연된 소프트웨어 수준 영향은 다음과 같습니다:

  • 이전에 수락된 GOOSE 상태가 최신 상태가 이미 처리된 후 리스너에게 전달될 수 있습니다.
  • 구독자에게 보이는 상태가 최신 stNum에서 이전 stNum으로 이동할 수 있습니다.
  • 반복된 오래된 프레임은 이후 사본이 유효하지 않음으로 보고되더라도 리스너 활동을 계속 유발할 수 있습니다.

콜백 데이터를 독립적인 신선도 강제 없이 사용하는 애플리케이션은 오래되었거나 재생된 값을 처리할 수 있습니다.

다운스트림 영향은 구독자 애플리케이션, 구성, 인터록 로직 및 보호 로직에 따라 달라집니다.

이 실험에서는 물리적 보호 계전기, 트립 회로, 차단기 또는 실제 변전소 네트워크가 테스트되거나 운영되지 않았습니다.

제안된 수정 방향

구독자 상태를 업데이트하거나 리스너를 호출하기 전에:

  1. 마지막으로 수락된 stNum보다 오래된 수신 stNum을 거부합니다.
  2. stNum이 변경되지 않은 경우 비증가 sqNum을 거부합니다.
  3. 유효하지 않은 것으로 분류된 프레임이 마지막으로 수락된 상태를 덮어쓰거나 정상적인 리스너 경로를 통해 오래된 데이터를 전달할 수 없도록 합니다.
  4. 최종 구현에서 합법적인 재시작, 재동기화 및 카운터 처리 동작을 고려합니다.

임시 위험 완화

  • GOOSE 이더넷 세그먼트 및 VLAN에 대한 접근을 제한합니다.
  • 권한 없는 장치가 레이어 2 프레임을 주입하지 못하도록 방지합니다.
  • 예상치 못한 stNum 롤백 및 반복된 sqNum 값을 모니터링합니다.
  • 중요 로직에서 콜백 값을 사용하기 전에 구독자 데이터 신선도를 검증합니다.
  • 프로덕션 배포 전에 격리된 실험실 환경에서 변경 사항을 테스트합니다.

지원 증거

다음 이미지는 출처와 환경 정보를 제공합니다. 이는 재현을 뒷받침하지만 주요 결과를 이해하는 데 개별적으로 필요하지는 않습니다.

테스트 하네스 검사

테스트 하네스 검사

빌드 성공

빌드 성공

격리된 veth 네트워크

격리된 veth 네트워크

기준 캡처 요약

기준 캡처 요약

아티팩트 체크섬

아티팩트 체크섬

제안된 분류

  • 약점: 재생 및 메시지 신선도 검증 약점
  • 제안된 CWE: CWE-294, 캡처-재생에 의한 인증 우회

시연된 결과는 재생 수용 및 오래된 상태 전달입니다. 이는 테스트된 배포에서 암호화 인증이 활성화되었음을 증명하는 것에 의존하지 않습니다.

참고 자료

  • 공식 libiec61850 저장소
  • v1.6 트리의 영향받는 소스 파일
  • CVE.org의 CVE-2026-52134

크레딧

보고자:

  • Wang Jing
  • Li Chen Yu
  • Guo Lu Lu
  • Guo Jia Xin
  • Zhang Jia Tu
도구 다운로드