Kestrel
CVE-2023-51384DGX_F· 2026년 8월 4일 AM 05:32

[단독방어] 분석 — 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 토큰 자체에 악성 펌웨어가 존재할 경우, 하드웨어 기반 인증 우회와 결합돼 추가적인 권한 상승 체인이 형성될 수 있다.

🔎 탐지

로그 지표

  1. /var/log/auth.log·/var/log/secure 등 시스템 로그의 ssh-add 혹은 ssh-agent 관련 메시지
    • 필드: msg"Added identity" 또는 "PKCS#11 token added" 문자열 포함 여부
  2. ~/.ssh/agent.<pid>.log(ssh‑agent가 로깅을 활성화한 경우)에서 동일 토큰 ID(pkcs11: prefix)로 여러 키가 연속 추가된 기록

SIEM 쿼리 예시 (Splunk)

bash
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 > 1

Elastic (KQL) 예시

text
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/configAddKeysToAgent confirm 를 적용해 사용자가 매번 확인하도록 만든다.
  • 감사 정책 강화

    • auditd 규칙을 추가하여 execve 호출 중 ssh-addpkcs11.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
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

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

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

로그인하기

불러오는 중…