SK쉴더스 로고
ADT캡스캡스홈
SK쉴더스

libssh2 클라이언트 측 힙 버퍼 오버플로우 취약점 (CVE-2026-55200)

EQST Now | 2026.06.30

NOW Briefing

Brief 1 libssh2는 Git·curl 등 수많은 도구에 내장된 클라이언트용 SSH 라이브러리로, 1.11.1 이하 전 버전에서 정수 오버플로 기반의 힙 버퍼 오버플로우 취약점(CVE-2026-55200)이 확인됐습니다.
Brief 2 공격자가 통제하거나 탈취한 SSH 서버가 비정상적으로 큰 길이 값을 담은 패킷을 보내면, 접속한 클라이언트의 메모리가 손상되며 RCE(원격 코드 실행)로 이어질 수 있습니다.
Brief 3 CVSS 9.2의 심각도에 6월 27일 공개 PoC까지 등장한 만큼, 내 환경의 libssh2 의존성을 식별하고 패치 커밋 기준으로 다시 빌드하거나 신뢰할 수 없는 서버 접속을 차단해야 합니다.

libssh2 클라이언트 측 힙 버퍼 오버플로우 취약점 (CVE-2026-55200)

■ 개요

libssh2는 C로 작성된 클라이언트용 SSH2 프로토콜 라이브러리로, 애플리케이션이 SSH·SCP·SFTP 통신을 직접 구현하지 않고 호출만으로 처리할 수 있게 해줍니다. Git, curl을 비롯한 다수의 클라이언트 도구와 자동화 스크립트가 이 라이브러리를 가져다 씁니다. 이번 취약점은 1.11.1 이하 모든 릴리스에 영향을 미치며, libssh2로 외부 SSH 서버에 접속하는 모든 환경이 그 대상입니다.

문제는 이 영향이 서버가 아니라 접속하는 클라이언트 쪽에서 발생한다는 점입니다. 공격자가 악성 SSH 서버를 운영하거나 정상 서버를 탈취한 뒤, 접속해 온 클라이언트에 조작된 패킷을 돌려보내면 클라이언트 프로세스의 메모리가 손상됩니다. 인증이 완료되기 전 전송 계층 처리 단계에서 트리거되므로, 자격증명 없이도 악용할 수 있습니다. 이 조건이 충족되면 클라이언트 측 원격 코드 실행으로 이어집니다.

영향받는 1.11.1 이하 버전이 광범위하게 배포돼 있어 우선순위가 높습니다. 패치는 2026년 6월 12일 커밋(97acf3df)으로 이미 공개돼 있지만, 이를 담은 정식 릴리스는 아직 나오지 않았습니다. 따라서 지금 적용하려면 이 커밋을 직접 반영해 다시 빌드해야 합니다. 그사이 6월 27일에는 PoC까지 공개돼, 공격 코드만 먼저 풀린 셈입니다.

■ 요약

항목 내용
CVE ID CVE-2026-55200 (libssh2 클라이언트 측 힙 버퍼 오버플로우 RCE)
CVSS 점수 CVSS 4.0 9.2 / Critical
취약점 유형 CWE-680, 정수 오버플로 → 힙 버퍼 오버플로우
영향/위험 • 악성·탈취 SSH 서버 접속 시 클라이언트 측 원격 코드 실행 가능
• 인증 전 전송 계층 처리 단계에서 트리거됨
• Git·curl 등 libssh2 사용 도구가 광범위하게 노출됨
취약 버전 libssh2 1.11.1 이하 전 버전
패치 버전 패치 커밋 97acf3df (이를 포함한 공식 릴리스 미출시)

■ 기술 분석

ssh2_transport_read()는 libssh2의 전송 계층에서 수신한 SSH 패킷을 해독·조립하는 함수입니다. 이 함수는 패킷 앞부분의 패킷 길이 필드(packet_length)를 읽어, 이후 페이로드를 담을 버퍼 크기와 처리 경계를 계산합니다. 이 값은 통신 상대인 서버가 보내온 데이터이므로, 검증 없이 신뢰해서는 안 되는 입력입니다.

패치 전 코드는 packet_length의 하한(< 1)만 확인하고 상한은 검사하지 않았습니다. 악성 서버가 채널 데이터 메시지(SSH_MSG_CHANNEL_DATA)에 비정상적으로 큰 길이 값을 실어 보내면, 이 값이 그대로 버퍼 계산에 쓰이며 정수 오버플로와 과대 산정이 일어납니다. 그 결과 할당 경계를 넘어선 힙 영역에 데이터가 기록되는 힙 버퍼 오버플로우가 발생합니다. 이는 메모리 손상을 거쳐 코드 실행으로 악용될 수 있습니다(CWE-680).

패치는 동일한 검증 지점에 상한 검사를 추가해, packet_lengthLIBSSH2_PACKET_MAXPAYLOAD를 초과하면 LIBSSH2_ERROR_OUT_OF_BOUNDARY를 반환하고 처리를 중단하도록 합니다.

/* [패치 전] */
if(p->packet_length < 1)
    return LIBSSH2_ERROR_DECRYPT;

/* [패치 후] */
if(p->packet_length < 1) {
    return LIBSSH2_ERROR_DECRYPT;
}
else if(p->packet_length > LIBSSH2_PACKET_MAXPAYLOAD) {
    return LIBSSH2_ERROR_OUT_OF_BOUNDARY;
}

📘 INFO

일반적인 SSH 위협은 서버를 노립니다. 그러나 이 취약점은 방향이 반대입니다.

클라이언트가 접속하는 서버를 신뢰할 수 있다는 암묵적 가정을 악용하므로, 탈취된 내부 서버나 중간자(통신 경로 중간에 끼어드는 공격자) 서버 한 대가 접속해 오는 다수 클라이언트를 공격하는 경로가 됩니다.

■ PoC

공개된 PoC는 악성 서버 역할을 하며, 핸드셰이크(연결 초기 협상) 이후 클라이언트가 채널 데이터를 수신하는 시점에 과대한 길이 값을 담은 패킷을 돌려주는 방식으로 알려져 있습니다. 근본 원인은 패치 diff에 드러난 상한 미검증 한 줄이며, 아래는 그 검증 관점을 방어적으로 단순화한 예시입니다.

// 방어용으로 단순화한 예시 — 실제 익스플로잇이 아님
uint32_t packet_length = read_len(server_packet);  // 악성 서버가 보낸 값
if (packet_length < 1)
    return ERROR;                  // 취약: 하한만 검사, 상한 검사 없음
// LIBSSH2_PACKET_MAXPAYLOAD 초과 시 힙 버퍼 오버플로우 발생 지점
process_payload(packet_length);    // ... 무기화 로직 생략 ...
# 피해자 트리거: 신뢰할 수 없는 서버에 접속하는 정상 동작 자체가 진입점
git clone ssh://untrusted-host/repo

⚠️ WARN

이 코드는 실제 익스플로잇이 아니라 공개 PoC의 검증 관점을 방어적으로 단순화한 예시입니다.

정상 API 호출(git clone)만으로도 신뢰할 수 없는 서버에 접속하는 순간 트리거 조건이 성립하므로, 패치 전까지는 접속 대상 자체를 통제해야 합니다.

■ 탐지 및 점검

ldd와 패키지 매니저 질의로 libssh2를 링크하는 바이너리를 식별하고, 버전이 1.11.1 이하인지 확인합니다.

• Git·curl·SFTP 클라이언트 등 SSH 접속을 하는 자동화 스크립트의 libssh2 의존성을 함께 점검합니다.

• 클라이언트 호스트에서 SSH 세션 직후 새로 관측되거나 신뢰되지 않는 호스트로 향하는 비정상 아웃바운드 연결을 모니터링합니다.

• CI/CD·백업·배포 파이프라인이 외부 SSH 서버에 접속하는 경로를 목록화해 신뢰 여부를 다시 검토합니다.

✅ CHECK

점검 대상은 "내가 운영하는 SSH 서버"가 아니라 "내 환경이 접속해 나가는 SSH 클라이언트"입니다.

직접 운영하는 서버가 없어도 Git·curl 등을 사용한다면 영향 범위에 포함됩니다.

■ 대응 방안

• 공식 릴리스가 아직 나오지 않았으므로 패치 커밋 97acf3df 기준으로 직접 빌드하거나, 배포판·벤더가 백포트(상위 버전 수정을 구버전에 이식)한 패키지가 공개되면 즉시 적용합니다.

• 패치 적용 전까지 신뢰할 수 없는 SSH 서버로의 클라이언트 접속을 차단하거나 알려진 호스트로만 제한합니다.

known_hosts 고정과 호스트 키 검증을 강제해 탈취·중간자 서버로의 연결 위험을 낮춥니다.

💡 TIP

다수 도구가 libssh2를 정적·동적으로 링크하므로, OS 패키지 하나만 갱신하면 끝나지 않을 수 있습니다.

사내에서 별도로 빌드해 배포한 바이너리는 SBOM(소프트웨어 구성 명세)이나 빌드 매니페스트로 libssh2 버전을 별도 추적해야 합니다.

[참고 자료]

libssh2 fix commit 97acf3df

GitHub Advisory GHSA-r8mh-x5qv-7gg2 (CVE-2026-55200)

cvedaily — libssh2 CVE-2026-55200 PoC released

  • #EQST_NOW
  • #취약점

관련 서비스

더 많은 보안 인사이트

SK쉴더스 유튜브 채널에서 확인하세요.

SK쉴더스 유튜브 채널에서 확인하세요.
보안 트렌드와 대응방법

매월 뉴스레터로 확인하세요.

매월 뉴스레터로 확인하세요.