위협 요약
2026년 8월 4일, NVD에 CVE-2026-60007이 등록되었다. Eclipse Milo 0.6.0~1.1.4의 username-token 처리 과정에서 RSA PKCS#1 v1.5 패딩 오라클 취약점이 발견되었다. 온-패스(on-path) 공격자가 Basic128Rsa15 암호화된 사용자의 username-token을 포착하면, 반복적인 ActivateSession 요청을 통해 패딩 오라클을 활성화하여 피해자의 비밀번호를 복원하고 복원된 자격증명으로 OPC UA 서버에 인증할 수 있다. CVSS 4.0 점수는 9.1(CRITICAL)로 평가되며, 공격에 온-패스 위치가 필요해 단순 스니핑만으로 악용은 불가능하다. 현재까지 공개 PoC나 실제 악용 보고는 없으며, CISA KEV에도 아직 등재되지 않았다. 수정 커밋(db59fae)이 확인되었으나 공식 릴리스 버전은 아직 발표되지 않았다.
취약점 개요
| 항목 | 내용 |
|---|---|
| CVE ID | CVE-2026-60007 |
| 제품 | Eclipse Milo OPC UA SDK |
| 취약 버전 | 0.6.0 ~ 1.1.4 |
| CVSS 4.0 | 9.1 (CRITICAL) |
| CWE | CWE-204 (Observable Response Discrepancy) |
| CNA | Eclipse Foundation |
| 등록일 | 2026-08-04 |
Eclipse Milo는 자바 환경에서 OPC UA(Open Platform Communications Unified Architecture) 프로토콜을 구현하는 오픈소스 SDK다. 산업 자동화, IIoT(Industrial Internet of Things) 환경에서 장치 간 통신을 위한 핵심 라이브러리로 널리 사용된다.
본 취약점은 Milo가 username-token 방식의 인증을 처리하는 과정에서 RSA PKCS#1 v1.5 디코딩 오류와 기타 인증 실패에 서로 다른 상태 코드를 반환하는 것에서 발생한다. 공격자는 이 오류 응답의 차이를 관찰해 패딩이 올바른지 여부를 판단할 수 있으며, 이를 통해 Basic128Rsa15 암호화 정책으로 보호된 username-token을 해독할 수 있다.
CVSS 4.0 벡터
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
| 메트릭 | 값 | 의미 |
|---|---|---|
| Attack Vector | Network (원격) | 네트워크를 통해 공격 가능 |
| Attack Complexity | Low (저) | 복잡한 사전 조건 불필요 |
| Attack Requirements | Present (온-패스 필요) | 네트워크 트래픽 모니터링 가능해야 함 |
| Privileges Required | None (인증 불필요) | 사전 권한 불필요 |
| User Interaction | None (자동화 가능) | 피해자 상호작용 불필요 |
| Confidentiality Impact | High (비밀번호 복원) | 자격증명 해독 |
| Integrity Impact | High (인증 탈환) | 위조 자격증명으로 인증 |
| Availability Impact | None | 서비스 중단 없음 |
AT:P(Attack Requirements: Present)는 공격자가 네트워크 트래픽을 중간에서 관찰할 수 있는 위치(온-패스)에 있어야 함을 의미한다. 외부에서 단순 스니핑만으로 악용은 불가능하다.
기술적 분석
취약점 원리: RSA PKCS#1 v1.5 패딩 오라클
RSA PKCS#1 v1.5 암호화는 메시지 암호화 전에 특정 형식의 패딩(padding)을 추가하는 방식이다. 디코딩 시 패딩 형식이 올바르지 않으면 오류가 발생하는데, 서버가 패딩 오류와 기타 유형의 인증 실패를 서로 다른 응답으로 반환하면, 공격자는 이 차이로 패딩이 맞는지 틀린지를 판단할 수 있다. 이를 패딩 오라클(Padding Oracle)이라고 한다.
Blinder가 1998년 제안한 패딩 오라클 공격은 수천~수만 번의 반복 요청으로 평문을 복원할 수 있는 것으로 유명하다. 각 비트를 복원하는 데 평균 256번의 요청이 필요하며, 전체 평문을 복원하려면 평문 길이에 비례하는 시간이 걸린다.
공격 시나리오
- 트래픽 포착: 공격자가 온-패스 위치(네트워크 세그먼트 내 또는 프록시)에서 피해자의 Basic128Rsa15 암호화된 UsernameIdentityToken을 포착
- 변조 및 전송: 포착한 토큰을 반복적으로 변조하여 ActivateSession 요청을 서버에 전송
- 오류 응답 관찰: 서버가 반환하는 오류 응답의 차이를 관찰해 패딩 상태 판단
- 패딩 오류: 특정 상태 코드 (예: Bad_DecodingError)
- 디코딩 성공 but 잘못된 비밀번호: 다른 상태 코드 (예: Bad_IdentityTokenInvalid)
- 점진적 복원: 패딩 오라클 공격 알고리즘으로 평문(비밀번호)을 비트 단위 복원
- 자격증명 위조: 복원된 비밀번호로 OPC UA 서버에 인증
공격에 필요한 조건
- 온-패스 위치: 공격자가 OPC UA 통신 트래픽을 중간에서 관찰하고 변조할 수 있어야 함
- Basic128Rsa15 활성화: 서버가 Basic128Rsa15 암호화 정책을 사용 중이어야 함
- Username-token 인증: username-token 방식의 인증이 활성화되어 있어야 함
수정 커밋 분석
Eclipse Milo 저장소의 수정 커밋(db59fae993a3a1bc66fffc8a2796d444b40285fb)에서 다음과 같은 변경이 확인되었다.
수정 제목: "Close username-token padding oracle (#1804)"
주요 변경 내용:
- 모든 토큰 파싱 실패 시 동일한 상태 코드(Bad_IdentityTokenInvalid) 반환 — 패딩 오류와 기타 인증 실패의 응답 차이 제거
- 원인 예외(exception.getCause()) 제거 — 내부 구조 정보를 누출하지 않도록 차단
- RSA15와 OAEP 모두 동일한 방식으로 처리 — 암호화 방식에 따른 응답 차이 제거
핵심은 모든 실패 경로를 동일한 응답으로 합쳤다는 점이다. 공격자가 오류 응답의 차이로 패딩 상태를 판단할 수 없게 되어 패딩 오라클 공격이 불가능해졌다.
관련 암호화 정책
| 암호화 정책 | 사용 알고리즘 | 패딩 오라클 노출 여부 |
|---|---|---|
| Basic128Rsa15 | AES-128-CBC + RSA PKCS#1 v1.5 | ⚠️ 취약 |
| Basic256Sha256 | AES-256-CBC + RSA PKCS#1 v1.5 | ⚠️ 취약 (동일한 RSA 디코딩 로직 사용) |
| Aes128_Sha256_RsaOaep | AES-128-CBC + RSA OAEP | ✅ 안전 (OAEP는 패딩 오라클에 내성) |
영향 범위
직접 영향 대상
- Eclipse Milo 0.6.0 ~ 1.1.4를 사용하는 OPC UA 서버/클라이언트
- Basic128Rsa15 암호화 정책이 활성화된 환경
- Username-token 인증 방식을 사용하는 환경
산업 환경별 영향
OPC UA는 산업 자동화, IIoT 환경에서 가장 널리 사용되는 통신 프로토콜 중 하나다. 따라서 본 취약점은 다음과 같은 환경에 직접적인 영향을 미친다.
- 제조 공장: 생산 라인 제어 시스템(SCADA, PLC) 간 통신
- 에너지 설비: 발전소, 변전소 등 critical 인프라 모니터링 시스템
- 스마트 팩토리: MES(Manufacturing Execution System), ERP 연동
- 수자원/폐기물 처리: 자동화 제어 시스템
- 교통/물류: 자동화 물류 시스템, 철도 제어 시스템
공격 제한 조건
온-패스(On-path) 위치가 필요하므로, 다음과 같은 환경에서는 실질적 위험이 낮다.
- OPC UA 통신이 외부 네트워크와 격리된 내부망에서 운영되는 환경
- 네트워크 세그멘테이션이 잘 구성된 환경
- Basic128Rsa15를 사용하지 않고 Aes128_Sha256_RsaOaep를 사용하는 환경
공개 정보
- 공개 PoC: 없음
- 실제 악용 보고: 없음
- CISA KEV 등재: 없음
- EPSS 점수: 추가 확인 필요
대응 방안
1. Eclipse Milo 업그레이드 (즉시 대응)
취약한 버전(0.6.0 ~ 1.1.4)을 사용하는 모든 시스템에서 수정된 버전으로 업그레이드한다. 수정 커밋(db59fae)이 이미 저장소에 반영되었으나, 공식 릴리스 버전은 아직 발표되지 않았다. 공식 릴리스가 발표되면 즉시 적용하고, 긴급한 경우 수정 커밋을 직접 머지해 빌드할 수 있다.
<!-- Maven 의존성 업데이트 (공식 릴리스 발표 시) -->
<dependency>
<groupId>org.eclipse.milo</groupId>
<artifactId>sdk-server</artifactId>
<version>1.1.5</version>
</dependency>
2. Basic128Rsa15 비활성화 (단기 대응)
업그레이드가 즉시 불가능한 경우, Basic128Rsa15 암호화 정책을 비활성화하고 더 안전한 암호화 정책으로 전환한다.
- Basic256Sha256으로 전환 (단, 동일한 RSA PKCS#1 v1.5 로직을 사용하므로 근본적 해결이 아님)
- Aes128_Sha256_RsaOaep로 전환 (OAEP 사용으로 패딩 오라클에 내성)
3. 인증 방식 변경 (보조 대응)
Username-token 인증 대신 더 안전한 인증 방식을 사용한다.
- X.509 기반 Certificate 인증 사용
- OAuth2/JWT 기반 토큰 인증 적용
- 다중 인증(MFA) 도입
4. 모니터링 및 탐지 (지속 대응)
반복적인 ActivateSession 실패 패턴을 모니터링해 패딩 오라클 공격을 탐지한다.
- 동일 IP에서短时间內 다수 ActivateSession 요청 로그 수집
- 실패 상태 코드별 분포 분석 (Bad_IdentityTokenInvalid vs Bad_DecodingError 비율)
- 이상 패턴 감지 시 자동 차단 또는 경고 알림
5. 네트워크 세그멘테이션 (장기 대응)
OPC UA 통신망이 외부 네트워크와 물리적으로 격리되도록 구성한다. 온-패스 공격의 전제 조건인 네트워크 트래픽 접근을 차단하는 것이 가장 근본적인 방어다.
참고문헌
-
NVD (National Vulnerability Database)
https://nvd.nist.gov/vuln/detail/CVE-2026-60007 -
CVE.org
https://www.cve.org/CVERecord?id=CVE-2026-60007 -
Eclipse Milo 수정 커밋
https://github.com/eclipse-milo/milo/commit/db59fae993a3a1bc66fffc8a2796d444b40285fb -
Eclipse 보안 추적 (CVE 할당)
https://gitlab.eclipse.org/security/cve-assignment/-/work_items/183 -
Eclipse 보안 리포트
https://gitlab.eclipse.org/security/vulnerability-reports/-/work_items/598
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!