[단독방어] 분석 — CVE-2023-51384
CVE-2023-51384 allows incomplete destination constraints on PKCS#11 keys added to ssh‑agent (pre‑9.6), enabling locally‑privileged attackers to bypass intended key restrictions; immediate mitigation is to disable PKCS#11 support in SSH client and agent configurations.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00426 · 악용난이도 hard
🔍 공격 기법
OpenSSH 8.9 ~ 9.5 이하의 ssh-agent에 PKCS#11 토큰을 이용해 여러 개인키를 추가할 때, 첫 번째 키에만 목적지 제약이 적용되고 이후 키에는 전혀 적용되지 않는다. 로컬 사용자(또는 제한된 권한)를 가진 공격자는 악성 PKCS#11 모듈을 준비하고 ssh-add -s <pkcs11.so> 명령으로 토큰을 등록하면, 제약이 없는 키가 ssh‑agent에 남아 다른 서비스·서버에 자유롭게 인증에 사용될 수 있다.
악용 가능성: 이 취약점은 CVSS 벡터 AV:L·AC:L·PR:L·UI:N 로, 공격자는 로컬 시스템에 직접 접근할 수 있고(AV = Local), 최소한의 복잡도만으로(AC = Low) 기존 사용자 권한을 그대로 이용해(Privilige = Low) 자동화된 인터랙션 없이 실행이 가능합니다. 따라서 실제 공격 전제조건은 “ssh‑agent가 실행 중인 로컬 계정에 로그인되어 있는 상태”와 “PKCS#11 토큰이 연결돼 여러 키를 반환하도록 구성된 환경”이며, 이 두 조건만 충족하면 추가적인 권한 상승이나 사용자 조작 없이도 제한 적용 오류를 악용할 수 있습니다. EPSS = 0.00426(≈0.4 %)은 아직 널리 이용되지 않은 점을 의미하지만, 0.4 % 수준의 확률이라도 공개된 취약점이며 KEV 리스트에 등재되지 않았다는 사실은 현재까지 대규모 악용 사례가 보고되지 않았음을 시사합니다. 트리거 조건은 PKCS#11 토큰을 통해 여러 개인키를 추가할 때 첫 번째 키에만 목적지 제약이 적용되고 이후 키는 제약 없이 남게 되는 점이며, 이는 ssh‑agent 내부의 메모리 구조와 키 관리 로직을 직접 조작함으로써 이루어집니다. 공격 표면은 SSH 프로토콜(특히 agent forwarding)과 ssh‑
💥 영향 분석
- 제한된 목적지(예: 특정 호스트)만 허용하도록 설정한 PKCS#11 키가 실제로는 모든 SSH 서버에 사용할 수 있게 된다.
- 공격자는 동일 토큰에서 반환되는 두 번째·이후 키를 이용해 권한 상승 혹은 무단 원격 로그인(특히
ssh -A로 에이전트 포워딩을 사용 중인 경우) 을 수행할 수 있다. - 영향 범위는 로컬 시스템에 존재하는 사용자 계정에 국한되지만, 해당 계정이 신뢰된 SSH 키를 보유하고 있다면 조직 내 다른 호스트까지 위험이 전파된다.
🔗 관련 취약점·체이닝
- 동일한
ssh-agent메모리 조작을 이용한 CVE‑2023‑xxxxx(가상의 번호는 제외)와 연계해 에이전트 메모리 변조 후 키 탈취 가능성. - PKCS#11 토큰 자체에 악성 펌웨어가 존재할 경우, 하드웨어 기반 인증 우회와 결합돼 추가적인 권한 상승 체인이 형성될 수 있다.
🔎 탐지
로그 지표
/var/log/auth.log·/var/log/secure등 시스템 로그의ssh-add혹은ssh-agent관련 메시지- 필드:
msg에"Added identity"또는"PKCS#11 token added"문자열 포함 여부
- 필드:
~/.ssh/agent.<pid>.log(ssh‑agent가 로깅을 활성화한 경우)에서 동일 토큰 ID(pkcs11:prefix)로 여러 키가 연속 추가된 기록
SIEM 쿼리 예시 (Splunk)
1index=linux sourcetype=syslog ("ssh-add" OR "Added identity") 2| regex _raw="PKCS#11.*" 3| stats count by host, user, token_path=_raw 4| where count > 1Elastic (KQL) 예시
1message : "*ssh-add*" and message : "*pkcs11*" 2| aggregate metric=count by host, user, pkcs11_provider.keyword 3| where count > 1정규식(로그 파싱)
Added identity: (.+) from PKCS#11 provider (.*)→provider=$2,key_fingerprint=$1
오탐 튜닝
- 정상적인 스마트카드 사용 환경에서는 다중 키가 동시에 추가될 수 있다. 이 경우
ssh-add -c(confirm) 옵션이 사용되는지 확인하고,Confirm=yes플래그가 로그에 존재하면 오탐으로 제외한다.
🛡️ 완화 방안
-
Agent Forwarding 차단
/etc/ssh/sshd_config에서AllowAgentForwarding no로 설정하고 재시작.
-
PKCS#11 키 추가 시 확인 옵션 강제
- 클라이언트 측
~/.ssh/config에AddKeysToAgent confirm를 적용해 사용자가 매번 확인하도록 만든다.
- 클라이언트 측
-
감사 정책 강화
auditd규칙을 추가하여execve호출 중ssh-add와pkcs11.so경로를 감시 (-w /usr/bin/ssh-add -p x -k).
구현 난이도: 중간 – SSHD 재시작 및 auditd 룰 적용 필요.
운영 영향: 기존 에이전트 포워딩을 활용하던 자동화 스크립트가 실패할 수 있음.
검증 방법:ssh -A user@host시 “Agent forwarding disabled” 오류 확인, audit 로그에ssh-add호출 기록 유무 점검.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00426 · exploit=hard · in_scope=None