CVE-2026-7273 (Zyxel GS1900 스위치 스택 버퍼 오버플로) 분석
분류: CVE · 네트워크 장비·펌웨어 · RCE · CVE-2026-7273 · [표준]
스위치는 네트워크의 배관입니다. 배관을 쥐면 그 위를 흐르는 모든 것을 본다는 뜻이라, 관리 인터페이스는 특히 단단해야 합니다. Zyxel GS1900 시리즈 스마트 스위치의 웹 관리 프로그램은 그 반대였습니다. 인증 없이 보낸 한 번의 과대 HTTP 요청이 고정 크기 스택 버퍼를 넘겨, LAN 인접 공격자가 장비에서 OS 명령을 실행할 수 있었습니다. 패치가 나온 뒤에도 미패치 장비가 실환경에서 대량으로 침해됐습니다.
개요
Zyxel GS1900 시리즈는 소규모·중견 네트워크에서 널리 쓰이는 스마트 매니지드 스위치입니다. 이 장비들의 웹 관리 인터페이스를 담당하는 CGI 프로그램에 스택 기반 버퍼 오버플로(CWE-121) 결함이 있었습니다. 인증이 필요 없고(pre-auth), LAN 인접 네트워크에서 조작된 HTTP 요청 하나만으로 트리거됩니다. 성공하면 공격자는 장비에서 OS 명령을 실행해 스위치를 완전히 장악할 수 있습니다.
핵심 구조는 단순합니다. CGI 프로그램이 HTTP 요청에 담긴 사용자 입력을 고정 크기 스택 버퍼에 복사하기 전에 길이를 검증하지 않았습니다. 버퍼보다 긴 입력이 들어오면 인접 스택 메모리를 덮어쓰고, 여기에는 함수의 복귀 주소 같은 제어 데이터가 놓입니다. 이 흐름 제어를 빼앗으면 임의 코드 실행으로 이어집니다. 근본은 전형적인 입력 길이 검증 누락에 의한 스택 오버런입니다.
- CWE: CWE-121 (Stack-based Buffer Overflow). ⚠️미확인(팩트체크 대상) — CWE 매핑은 리서치 재료(집계 사이트·독립 분석) 기준이며 NVD 공식 매핑 대조 대상입니다.
- CVSS: v3.1 기준 8.8 (High), 벡터
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. ⚠️미확인 — 이 값은 NVD를 미러링하는 OpenCVE 기준이고, NVD 원본 상세 페이지가 리서치 단계에서 직접 로드되지 않았습니다. 팩트체커가 NVD·CVE.org 원본에서 CVSS·CWE를 직접 대조해야 합니다. - 공격 벡터: 벡터의
AV:A는 Adjacent(인접) 로, 인터넷 원격이 아니라 LAN 인접 네트워크 접근을 뜻합니다. 인증 불필요(PR:N), 사용자 상호작용 불필요(UI:N). - 영향: OS 명령 실행 → 장비 완전 장악. 기밀성·무결성·가용성 모두 High.
- 패치/공개: Zyxel advisory 2026-06-16 공개, 모델별
.2)C0펌웨어로 수정. ⚠️미확인 — 날짜·버전 문자열은 리서치 재료 기준. - 발견 크레딧: ISCAS(중국과학원 소프트웨어연구소) 연구진. ⚠️미확인 — 크레딧은 벤더 advisory 기준, 팩트체크 대상.
- 실환경 악용(KEV): CISA가 2026-09-21 Known Exploited Vulnerabilities 카탈로그에 등재. ⚠️미확인 — 등재일·기한은 리서치 재료 기준.
한 줄 요약: “길이를 재지 않고 고정 버퍼에 복사하면, 넘치는 입력이 스택의 흐름 제어를 덮는다” — 무인증 CGI 입력 하나가 스택 오버런으로, 다시 OS 명령 실행으로 이어졌습니다.
구조적 제약(정직성): 이 CVE는 폐쇄형 벤더 펌웨어입니다. 공개 git 저장소·패치 커밋·소스 파일 경로가 존재하지 않습니다. 그래서 이 글은 다른 CVE 글과 달리 고정 SHA의 실제 오픈소스 코드 렌더 블록을 넣지 않습니다. 라인 단위 diff는 입수 불가이며, 취약 함수·바이너리 이름도 미공개입니다. 대신 아키텍처 수준(입력 길이 검증 누락 → 고정 스택 버퍼 오버런)으로 서술하고, 수정은 버전 문자열 단위로 짚습니다.
기술 배경 — 스택 버퍼와 길이 검증
프로그램이 함수를 호출하면 지역 변수와 복귀 주소가 스택이라는 메모리 영역에 쌓입니다. 여기에 크기를 미리 정해 잡아둔 저장 공간이 고정 크기 스택 버퍼입니다. 예컨대 “이름은 최대 64바이트”라고 잡아두는 식입니다.
문제는 그 버퍼에 데이터를 채울 때 벌어집니다. 들어오는 데이터가 버퍼 크기를 넘는지 먼저 확인하고 넘치면 자르거나 거부해야 하는데, 이 검증을 빼먹으면 데이터가 버퍼 경계를 넘어 인접한 스택 메모리를 덮어씁니다. 스택에는 함수가 끝난 뒤 돌아갈 복귀 주소가 함께 놓여 있어서, 이 주소를 원하는 값으로 덮으면 프로그램의 실행 흐름을 공격자가 정한 곳으로 돌릴 수 있습니다. 이것이 고전적인 스택 오버플로 악용의 뼈대입니다.
임베디드 네트워크 장비의 웹 관리 기능은 흔히 CGI(Common Gateway Interface) 프로그램으로 구현됩니다. 브라우저가 보낸 HTTP 요청의 파라미터를 CGI가 받아 처리하는 구조입니다. 이때 요청에 담긴 값은 전적으로 외부에서 조종 가능한 입력입니다. 그 길이를 재지 않고 고정 버퍼에 그대로 복사하면, 요청 하나가 곧 스택을 넘치게 하는 무기가 됩니다. C 계열로 작성된 펌웨어에서 이런 결함이 반복되는 이유는, 문자열 복사 함수 상당수가 대상 버퍼 크기를 스스로 확인하지 않기 때문입니다.
CVE 분석 요약 — 무엇이 원인인가
리서치 재료와 벤더·CISA advisory가 일치시킨 원인은 다음과 같습니다. 폐쇄형 펌웨어라 구체 파일·함수·라인은 공개되지 않았으므로, 아래는 아키텍처 수준 서술이며 코드 렌더는 생략합니다.
- 입력 진입점: GS1900 웹 관리 인터페이스의 CGI 프로그램이 HTTP 요청의 사용자 입력을 받습니다. 인증 전 단계에서 도달 가능한 경로입니다. ⚠️미확인 — 어느 CGI 엔드포인트·파라미터인지는 공개 정보에 없습니다.
- 취약 동작: 그 입력을 고정 크기 스택 버퍼에 복사하기 전 길이를 검증하지 않습니다. 버퍼보다 긴 요청이 인접 스택 메모리를 덮어씁니다.
- 결과: 스택의 제어 데이터(복귀 주소 등)가 덮이면 실행 흐름이 탈취돼 OS 명령 실행으로 이어집니다.
- 취약 함수·파일 경로: 입수 불가(UNAVAILABLE). 폐쇄형 펌웨어로 공개 소스·바이너리 심볼 정보가 없습니다. 구체 바이너리/함수명은 미공개입니다. ⚠️미확인.
- 패치 전 부모 SHA / 패치 커밋 SHA: 입수 불가. 공개 버전관리 시스템이 없습니다.
이 결함의 뿌리는 경계 없는 복사입니다. “입력이 얼마나 길든 일단 버퍼에 넣는다”는 판단이, 외부에서 조종되는 HTTP 요청과 만나 스택 오버런이 됩니다. 저작권·무해화 원칙에 따라 실제 트리거 요청·완성형 익스플로잇은 싣지 않습니다.
패치(버전 문자열 단위, ⚠️미확인 — 리서치 재료 기준): Zyxel은 2026-06-16 advisory와 함께 모델별 고정 펌웨어를 배포했습니다. 라인 단위 diff는 공개되지 않아 제시할 수 없고, 수정은 취약 버전 → 패치 버전의 문자열 경계로만 확인됩니다. 예를 들어 GS1900-48HPv2는 2.90(ABTQ.1)C0 이하가 취약이고 2.90(ABTQ.2)C0에서 수정됐습니다. 각 모델이 별도 펌웨어 코드명을 쓰므로 아래 표로 정리합니다.
영향 모델 및 버전 (10개 모델, ⚠️미확인 — 벤더 advisory·OpenCVE 기준):
| 모델 | 취약 (이하) | 패치 버전 |
|---|---|---|
| GS1900-8 | 2.90(AAHH.1)C0 | 2.90(AAHH.2)C0 |
| GS1900-8HP | 2.90(AAHI.1)C0 | 2.90(AAHI.2)C0 |
| GS1900-10HP | 2.90(AAZI.1)C0 | 2.90(AAZI.2)C0 |
| GS1900-16 | 2.90(AAHJ.1)C0 | 2.90(AAHJ.2)C0 |
| GS1900-24 | 2.90(AAHL.1)C0 | 2.90(AAHL.2)C0 |
| GS1900-24E | 2.90(AAHK.1)C0 | 2.90(AAHK.2)C0 |
| GS1900-24EP | 2.90(ABTO.1)C0 | 2.90(ABTO.2)C0 |
| GS1900-24HPv2 | 2.90(ABTP.1)C0 | 2.90(ABTP.2)C0 |
| GS1900-48 | 2.90(AAHN.1)C0 | 2.90(AAHN.2)C0 |
| GS1900-48HPv2 | 2.90(ABTQ.1)C0 | 2.90(ABTQ.2)C0 |
공격 시나리오 · 영향도 + 대응방안
공격 시나리오 (단계 압축, 완성형 페이로드 없음):
- 공격자가 대상 GS1900 스위치의 웹 관리 인터페이스에 LAN 인접 네트워크로 도달합니다(관리 포트가 노출된 세그먼트 접근).
- CGI 프로그램이 처리하는 엔드포인트에 버퍼 크기를 넘는 과대 입력을 담은 HTTP 요청을 인증 없이 보냅니다. 길이 검증이 없어 입력이 고정 스택 버퍼를 넘칩니다.
- 넘친 데이터가 스택의 제어 데이터를 덮어 실행 흐름을 탈취하고, 결과적으로 장비에서 OS 명령이 실행됩니다.
영향도: 확인된 동작은 LAN 인접 무인증 공격자가 장비에서 OS 명령을 실행하는 것입니다. 스위치를 장악하면 장비 설정과 트래픽 흐름을 조작할 수 있어 네트워크 전반으로 발판이 넓어집니다. 기밀성·무결성·가용성 영향이 모두 High로 매겨졌습니다.
실환경 악용도 보고됐습니다. 리서치 재료에 따르면 2026-08-17경부터 위협행위자가 미패치 장비를 침해하기 시작했고, 48개국 996대가 침해됐으며 그중 564대는 공장 기본 자격증명을 쓰고 있었습니다. 탈취 대상에는 장비 설정·네트워크 정보와 해시된 root 자격증명이 포함된 것으로 보고됐습니다. ⚠️미확인 — 악용 시점·규모·탈취 데이터는 2차 분석(Help Net Security·SecurityWeek) 기준이며, 일부 요약은 악용 시점을 “9월 17일경”으로 적었으나 다수 출처는 8월 17일경으로 일치합니다. 위협행위자 귀속은 이 글의 톤상 최소로만 언급합니다. 공격에 쓰였다는 도구(난독화된 스크립트)는 개념만 언급하고 재현하지 않습니다.
대응방안:
- 근본: 각 모델의 패치 버전(
.2)C0계열)으로 펌웨어를 업데이트합니다. 위 표에서 자기 모델의 패치 버전을 확인해 그 이상으로 올립니다. CISA가 실환경 악용으로 KEV에 등재한 사안이므로 우선순위가 높습니다. - 차선(즉시 업데이트 불가 시):
- 스위치 웹 관리 인터페이스를 신뢰된 관리 세그먼트로 격리하고, 일반 사용자·게스트 네트워크에서 관리 포트에 도달하지 못하게 합니다. 벡터가
AV:A(인접)이므로 관리 평면 분리만으로도 공격 표면이 크게 줄어듭니다. - 관리 인터페이스 접근을 특정 관리 호스트로만 제한(ACL·방화벽 규칙)하고, 불필요하면 웹 관리 기능 노출을 최소화합니다.
- 공장 기본 자격증명을 즉시 변경합니다. 침해 장비의 절반 이상이 기본 자격증명을 쓰고 있었던 만큼, 이는 사후 피해를 줄이는 기본 위생입니다.
- 스위치 웹 관리 인터페이스를 신뢰된 관리 세그먼트로 격리하고, 일반 사용자·게스트 네트워크에서 관리 포트에 도달하지 못하게 합니다. 벡터가
- 탐지 관점: 관리 인터페이스로 들어오는 비정상적으로 큰 HTTP 요청과 관리 세그먼트 밖에서의 접근 시도를 로그로 감시합니다. 스위치의 예기치 않은 재부팅·설정 변경·신규 아웃바운드 연결은 침해 신호일 수 있으므로 조사 대상입니다.
결론
초소의 문지기가 방문자 이름을 받아 적는 칸이 정확히 스무 칸이라고 합시다. 방문자가 이름 대신 백 글자를 밀어 넣는데 문지기가 칸을 세지 않으면, 넘친 글자는 옆 칸의 명령서를 덮어씁니다. 그 명령서에 “이 사람을 통과시켜라”가 적히면, 문은 열립니다.
이 부류의 사고가 반복되는 이유는 분명합니다. 외부에서 조종되는 입력을 고정 크기 버퍼에 길이 확인 없이 복사하는 순간, 요청 하나가 곧 흐름 제어를 덮는 무기가 되기 때문입니다. 이 결함은 우리가 다룬 다른 메모리 안전·경계 검증 누락 계열과 같은 뿌리를 공유합니다 — 그리고 관리 인터페이스가 인증 전 단계에서 조종 가능한 입력을 처리한다는 점에서, 무인증 진입점의 공격 표면 문제와도 닿아 있습니다. 정석은 모든 복사에 대상 버퍼 크기를 강제하고, 인증 전 단계에서 처리하는 입력을 특히 보수적으로 검증하는 것입니다. 패치는 그 방향으로 갔지만, 여기서 더 큰 교훈은 패치가 나와도 미패치 장비가 남으면 악용은 실제로 일어난다는 것입니다. 이 한 펌웨어의 버퍼는 고쳐졌지만, “길이를 재지 않는 복사”라는 사고방식은 다음 장비, 다음 CGI에서 또 시험대에 오릅니다. 그래서 우리는 도구가 아니라 방법을 남깁니다.
References / 참고자료
- Zyxel Networks, “Security advisory for stack-based buffer overflow in GS1900 series switches” (2026-06-16) — 이 글이 재구성한 벤더 1차 advisory(모델별 취약/패치 버전·발견 크레딧·근본원인 프레이밍). https://www.zyxel.com/global/en/support/security-advisories/zyxel-security-advisory-for-stack-based-buffer-overflow-vulnerability-in-gs1900-series-switches-06-16-2026
- NVD, “CVE-2026-7273 Detail” — 취약점 1차 정본(설명·CVSS·CWE). 리서치 단계에서 상세 페이지 직접 캡처 실패, 팩트체크 재확인 대상. https://nvd.nist.gov/vuln/detail/CVE-2026-7273
- CISA, “CISA Adds One Known Exploited Vulnerability to Catalog” (2026-09-21) — KEV 등재·실환경 악용 근거. https://www.cisa.gov/news-events/alerts/2026/09/21/cisa-adds-one-known-exploited-vulnerability-catalog
- OpenCVE, “CVE-2026-7273” — NVD 미러(CWE-121·CVSS 벡터·전 모델 버전 교차 확인). https://app.opencve.io/cve/CVE-2026-7273
- Help Net Security, “Attacker compromised nearly 1000 Zyxel switches since August” — 독립 분석(악용 규모·시점·탈취 데이터). https://www.helpnetsecurity.com/2026/09/22/zyxel-switches-cve-2026-7273-vulnerability-exploited/
- SecurityWeek, “Recent ZyXEL Switch Vulnerability Exploited by Chinese Hackers” — 독립 분석(타임라인·악용 도구 개념). https://www.securityweek.com/recent-zyxel-switch-vulnerability-exploited-by-chinese-hackers/
- BleepingComputer, “CISA orders feds to patch actively exploited Zyxel flaw by Thursday” — KEV 패치 기한 교차 확인. https://www.bleepingcomputer.com/news/security/cisa-orders-feds-to-patch-actively-exploited-zyxel-flaw-by-thursday/
이 글은 위 원 자료를 우리 관점에서 다시 쓰고 논평을 더한 것입니다. 특정 문장·코드를 그대로 옮기지 않았으며, 자세한 재현 절차는 원문을 참고하세요. 이 CVE는 폐쇄형 펌웨어라 공개 소스·패치 커밋·파일 경로가 없어, 고정 SHA 오픈소스 코드 렌더와 라인 단위 diff를 제시할 수 없습니다. ⚠️미확인 표시가 붙은 사실 주장(특히 CVSS·CWE 매핑·영향 버전·악용 규모/시점·발견 크레딧·패치 세부)은 발행 전 독립 팩트체크로 1차출처 대조가 끝나야 확정됩니다. 특히 팩트체커는 NVD 원본에서 CVSS 벡터를 직접 재확인해야 합니다(리서치 단계에서 NVD 상세 페이지 직접 캡처가 실패했습니다).