Nextcloud Collabora 명령 주입 취약점 CVE-2026-110447: 인증 없이 악용되는 내장 CODE 서버와 패치 우선순위 설계
홈랩 구축 체크리스트 — 로컬 LLM을 세우고 Tailscale로 안전하게 잇는 20단계를 A4 한 장으로 정리했습니다.
체크리스트 받기 →
Nextcloud의 내장 Collabora Online 앱(richdocumentscode)에서 인증 없이 호출할 수 있는 OS 명령 주입 취약점 CVE-2026-110447(CVSS 4.0 기준 9.2)이 9월 중순부터 실서버에서 악용되고 있다. 공격자는 웹셸을 심고 비밀번호 저장소와 암호화폐 지갑을 탐색한 것으로 보고되었다. 이 글에서는 취약점의 발생 구조, 노출 면과 패치 범위 점검 방법, 입력 검증과 프로세스 격리를 포함한 대응 절차를 정보관리기술사의 관점에서 설계한다.
참고: 주제 입력에는 이 취약점이 CISA KEV에 등재된 것으로 적혀 있었으나, 작성 시점(2026-10-27)에 확인한 공개 자료(OpenCVE, 보안 매체 보도)에서는 KEV 등재를 확인하지 못했다. 악용 사실 자체는 BleepingComputer 등 복수 매체가 보도했다. 따라서 본문은 "KEV 등재"를 전제하지 않고 "실제 악용 확인"을 패치 기한의 1순위 조건으로 삼는다. 등재 여부는 CISA 카탈로그에서 직접 재확인해야 하며, 등재되면 기한 조건은 더 강해질 뿐 대응 순서는 같다.
사건 개요
- 대상: Nextcloud용 Collabora Online 내장 CODE 서버 앱(
richdocumentscode). 별도 서버 없이 Nextcloud 안에서 문서 편집 기능을 제공한다. - 취약점 유형: OS 명령 주입(CWE-78).
proxy.php가 내장 서버를 기동하는 명령행을 만들 때 요청에서 파생된 값을 이스케이프 없이 넣는다. - 인증: 불필요. 사용자 상호작용도 필요 없다.
- 발동 조건: 내장 CODE 서버가 실행 중이 아닐 때, 예를 들어 컨테이너 재시작, 업그레이드, 크래시 직후에 트리거된다.
- 실행 권한: 웹 서버 사용자 권한. 공개된 보고에서는 root 권한 획득이 확인되지 않았다.
- 영향 없는 구성: 독립형 Collabora Online 서버, Docker·RPM/DEB 설치, Nextcloud All-in-One은 영향 대상이 아니라고 벤더가 밝혔다.
타임라인과 버전
| 시점 | 내용 |
|---|---|
| 2026-09-10 | 보고된 가장 이른 악용 시도 |
| 2026-09-11 | 수정 버전 26.4.303 배포 |
| 2026-10-03 | 커뮤니티가 진행 중인 악용을 경고 |
| 2026-10-14 | 보안 권고와 CVE 공개 |
영향 범위는 26.4.302 이하이고 수정 버전은 26.4.303 이상이다. 수정 배포와 공식 권고 사이가 한 달 이상 벌어졌으므로, 권고를 기다린 조직은 그 기간 동안 노출되어 있었다. 26.4.302부터 이 앱은 Nextcloud 30 이상을 요구하며, Nextcloud 29 이하는 지원이 끝난 버전이라 Nextcloud를 올리거나 앱을 제거하는 방법뿐이다.
취약점 발생 구조
앱은 PHP의 proxy.php에서 Collabora AppImage를 기동하면서 호스트와 요청 URL에서 만든 폰트 설정 URL을 bash -c 문자열 안에 큰따옴표로 감싸 넣는다. 큰따옴표 안에서는 셸이 $(...) 치환을 평가하므로 공격자가 URL에 명령을 심으면 그대로 실행된다. 수정은 내부 명령 전체를 escapeshellarg로 인용하는 방식이다.
flowchart LR
A["외부 요청 proxy.php"] --> B{"내장 CODE 서버 실행 중?"}
B -->|"예"| C["정상 프록시"]
B -->|"아니오"| D["기동 명령행 조립"]
D --> E["bash -c 문자열에 요청 값 삽입"]
E --> F["명령 치환으로 임의 명령 실행"]
F --> G["웹셸 설치 및 자격 증명 탐색"]
이 구조는 입력 검증 실패와 실행 경로 설계 실패가 겹친 사례다. 외부 값이 셸 문자열로 합쳐지는 순간 검증이 한 군데라도 빠지면 곧바로 명령 실행이 된다.
패치 기한의 1순위 조건: 악용 확인
CVSS 9.2는 중요하지만 기한을 정하는 근거는 악용 여부다. 우선순위 판단은 다음 순서가 합리적이다.
- 악용 확인 또는 KEV 등재: 공격자가 이미 사용 중이므로 취약점 존재가 아니라 노출 여부가 곧 위험이다.
- 노출 면: Nextcloud가 인터넷에서 접근 가능한가, 내장 CODE 서버를 쓰는가.
- 자산 영향 범위: 웹 서버 사용자가 읽을 수 있는 DB 자격 증명, 객체 저장소 키, 사용자 파일.
- CVSS·EPSS: 같은 조건 안에서 순서를 가르는 보조 지표.
이번 사례는 악용이 한 달 넘게 진행되었고, 조건이 맞으면 인증 없이 인터넷에서 도달 가능하며, 협업 서버에는 문서와 자격 증명이 모여 있다. KEV 등재 여부와 무관하게 즉시 대응 대상이다.
대응 절차 설계
1단계: 노출 여부 점검
occ app:list로richdocumentscode설치 여부와 버전을 확인한다.- 외부 노출 자산 스캔으로 Nextcloud가 인터넷에 열려 있는지 확인한다.
- 독립형 Collabora나 AIO 구성이면 이 취약점의 영향 밖이므로 점검 대상에서 구분한다.
2단계: 패치 또는 제거
- 26.4.303 이상으로 올리거나, 필요 없으면 앱을 제거한다. 벤더는 비활성화만으로는 부족하다고 경고했다. 파일이 남아 있어 경로가 계속 도달 가능하기 때문이다.
- 제거 후 디렉터리가 실제로 사라졌는지 확인한다.
- Nextcloud 29 이하는 본체 업그레이드 또는 앱 제거로 대응한다.
- 장기적으로는 별도 Collabora 서버(Docker와 리버스 프록시)로 분리해 Nextcloud 프로세스와 문서 변환 프로세스를 나눈다.
3단계: 침해 흔적 점검
패치는 이미 설치된 웹셸을 지우지 않는다. 점검은 패치 전에 로그와 파일 타임스탬프를 보존한 뒤 수행한다.
apps/richdocumentscode에서shx*.php,shrf4645.php등 예상 밖 PHP 파일을 찾는다.occ integrity:check-app richdocumentscode로 추가 파일을 검출한다.integrity:check-core는 코어만 보므로 대체가 안 된다.- 접근 로그에서 9월 10일 이후의
proxy.php요청 중$(,%24%28,${IFS},%2e%2e가 포함된 것을 찾는다. 순환된 로그는 증거가 사라졌을 수 있다. - 웹 서버 계정의 sudo 실패 기록과 외부 콜백(예: webhook.site) 통신을 확인한다.
4단계: 침해 가정 시 복구
- 웹 서버 사용자가 읽을 수 있던 자격 증명(DB,
config.php비밀값, 객체 저장소, SMTP, 앱 비밀번호, 토큰)을 교체한다. - 최초 공격 이전 시점으로 복원하거나 인스턴스를 재구축한다. 필요하면 제3자 검증을 받는다.
- 개인정보가 저장된 서버라면 유출 통지 의무(개인정보 보호법, GDPR 등) 해당 여부를 검토한다.
명령 주입 경로 차단 설계
일회성 패치와 별개로 같은 유형을 구조적으로 막는 통제가 필요하다.
| 통제 | 내용 |
|---|---|
| 입력 검증 | 외부 값을 셸 문자열에 합치지 않는다. 불가피하면 인자 배열로 전달하고 허용 목록으로 검증한다 |
| 실행 방식 | bash -c 대신 셸을 거치지 않는 실행 API를 쓴다. 인용이 필요하면 전용 이스케이프 함수를 쓴다 |
| 프로세스 격리 | 문서 변환·편집 서버를 별도 컨테이너로 분리하고 읽기 전용 파일시스템, 비특권 사용자, seccomp로 제한한다 |
| 권한 최소화 | 웹 서버 사용자가 읽는 비밀값을 줄이고, 비밀은 환경 분리 또는 비밀 관리 서비스에 둔다 |
| 이그레스 제어 | 웹 서버에서 외부로 나가는 통신을 허용 목록으로 제한해 콜백과 탐색을 막는다 |
| 무결성 감시 | 앱 디렉터리의 신규 PHP 파일을 파일 무결성 모니터링으로 경보한다 |
정책으로 정착시키는 방법
| 조건 | 권장 조치 기한 |
|---|---|
| 악용 확인 또는 KEV 등재 + 인터넷 노출 | 노출 제한·제거 즉시, 패치 72시간 이내 |
| 악용 확인 또는 KEV 등재 + 내부 한정 | 7일 이내 |
| 미악용 + 인터넷 노출 | 14일 이내 |
| 그 외 | 정기 패치 주기 |
여기에 앱·플러그인 단위의 자산 인벤토리, KEV와 벤더 릴리스 노트의 자동 대조, 권고 공개를 기다리지 않고 릴리스 노트의 보안 수정을 추적하는 절차를 포함한다. 이번 사례에서 수정은 9월 11일에 나왔지만 권고는 10월 14일에 공개되었기 때문이다.
마무리
CVE-2026-110447은 점수 9.2보다 인증 없는 접근, 한 달 이상 이어진 실제 악용, 협업 서버에 모인 자격 증명이라는 조건이 긴급도를 정한다. 대응은 노출 점검, 패치 또는 제거, 웹셸 점검, 침해 가정 시 자격 증명 교체의 순서로 설계해야 한다. 악용 확인과 KEV 등재를 패치 기한의 1순위 조건으로 정책화하고, 입력 검증과 프로세스 격리로 같은 유형의 명령 주입을 구조적으로 줄여야 한다.
Keywords
Collabora Online, CVE-2026-110447, Command Injection, Nextcloud, CODE Server, Web Shell, Patch Priority, 명령 주입, 웹셸, 프로세스 격리
Sources
- Hackers exploit Collabora RCE flaw to backdoor Nextcloud servers (BleepingComputer)
- Hackers Use Critical Collabora Flaw to Compromise Nextcloud Servers (eSecurity Planet)
- Nextcloud built-in CODE server CVE-2026-110447 RCE webshell (WZ-IT)
- OpenCVE CVE-2026-110447
- Debian Security Tracker CVE-2026-110447
'IT Professional Engineering > SEC' 카테고리의 다른 글
| Arista VeloCloud Orchestrator 제로데이 CVE-2026-16812: KEV 등재와 악용 확인이 정하는 긴급 패치 우선순위 (0) | 2026.10.27 |
|---|---|
| LiteLLM v1.107.0 릴리스 침해: 서명된 배포 경로의 신뢰를 재설계하는 공급망 보안 (0) | 2026.10.26 |
| HTTP2Shell CVE-2026-111497: Brotli 전이 의존성 취약점의 SBOM 기반 대응 설계 (0) | 2026.10.26 |
| OpenCode MCP 서버 로그인 코드 실행 취약점: 도구 연결 단계의 신뢰 경계 설계 (0) | 2026.10.24 |
| OpenCode 콘솔 침해와 제공자 API 키 노출: AI 코딩 도구 키 관리 사고 대응 설계 (0) | 2026.10.24 |
홈랩 구축 체크리스트를 A4 한 장으로 드립니다
로컬 LLM을 세우고 Tailscale로 안전하게 잇는 20단계. 이메일을 남기면 바로 보내드립니다. 광고 없이, 언제든 수신거부.
체크리스트 받기 →