
NextGen Connect 4.5.2 취약점 3개에 대한 동작하는 PoC.
NextGen Connect (Mirth Connect) 4.5.2에 존재하는 네트워크에서 도달 가능한 세 가지 취약점에 대한 동작하는 개념 증명(proof-of-concept) 익스플로잇입니다. 이 하네스는 공식 컨테이너 이미지를 실행하고, 해당 취약점에 필요한 채널 구성만 생성하며, 별도의 컨테이너에서 공격을 수행하고, 주장된 보안 효과가 관찰되지 않으면 실패합니다.
이번 검토는 공개된 Refute-or-Promote 방법론 과 그 오픈소스 오케스트레이션 플레이북 을 사용했습니다. 이 방법은 후보 생성과 새로운 컨텍스트에서의 적대적 검토를 분리하고, 승격 전에 경험적 증거를 요구합니다. 취약한 4.5.2 소스와 검토 방법은 모두 공개되어 있습니다. 일반적인 모델 접근 권한, 소스, 그리고 실험실에서 안전하게 검증할 수 있는 능력을 가진 사람이라면 누구나 동일한 프로세스를 적용할 수 있으며, 이러한 버그 클래스를 독립적으로 발견할 수도 있었을 것입니다. 하나의 보고서에 대한 기밀 유지가 근본적인 검토 역량을 비공개로 만들지는 않습니다.
이것들은 파서 단위 테스트가 아니라 실제 익스플로잇입니다. 이들은 SQL 인젝션을 통해 라이브 비밀번호 해시를 복구하고, 두 가지 서로 다른 인증되지 않은 XML 경로를 통해 대상 로컬 파일 내용을 유출하며, 재시작할 때까지 번들된 Derby 기반 작업을 차단합니다.
| CVE | 취약점 | 공격자 | 입증된 영향 | CVSS 3.1 / 4.0 | PoC |
|---|---|---|---|---|---|
| CVE-2026-82583 | _getTables selectLimit 인젝션 | 인증된 API 사용자 | 비밀번호 테이블을 공개 웹 루트로 내보내기; 재시작까지 번들 Derby 정지 | 8.3 / 7.2 | sql-selectlimit-injection/ |
| CVE-2026-78224 | XSLT Step XXE | 인증되지 않은 채널 클라이언트 | 대상 로컬 파일의 OOB 읽기; 채널 로컬 slow-entity DoS | 8.2 / 8.8 | xslt-step-xxe/ |
| CVE-2026-82578 | XML Batch Adaptor XXE | 인증되지 않은 채널 클라이언트 | 대상 로컬 파일의 OOB 읽기 | 7.5 / 8.7 | xml-batch-xxe/ |
CVSS 3.1과 4.0은 서로 다른 표준이며, 짝지어진 점수는 전후 비교가 아닙니다.
세 가지 모두 다음에 대해 재현되었습니다:
nextgenhealthcare/connect:4.5.2
sha256:4afa295cfe7c5ffd596efee69594157fea87202e33d66bb4a98a52db4598f836
NextGen은 XSLT 문제가 4.7.1에서 수정되었고 SQL 인젝션 및 XML Batch 문제가 4.7.2에서 수정되었다고 비공개로 보고했습니다. CISA 권고 ICSMA-26-253-01은 4.7.1 및 이전 버전을 영향을 받는 것으로 취급하고 4.7.2 이상을 권장합니다. 4.5 이후의 릴리스는 독점이므로, 이 저장소가 오픈소스 패치 릴리스에 사용된 것과 동일한 종류의 재현 가능한 부정 통제(negative control)를 제공할 수 있는 공개된 수정 이미지가 없습니다.
관리 API에 대한 인증된 발판은 해당 계정이 내보내도록 의도되지 않은 데이터에 대한 접근이 됩니다. 패키지된 익스플로잇은 라이브 PERSON_PASSWORD 행을 public_html 아래에 기록하고, 결과 파일이 인증 없이 다운로드 가능함을 입증합니다. 중요한 단계는 제한된 API 작업에서 더 이상 공격자의 세션이 전혀 필요 없는 디스크상의 파일로 넘어가는 것입니다.
실제 통합 환경에서 데이터베이스는 채널, 엔드포인트, 그리고 데이터베이스, SFTP 서버, 메일 릴레이, API 및 기타 임상 시스템에 도달하는 데 사용되는 자격 증명을 설명할 수 있습니다. 별도의 통제된 테스트에서 내보낸 채널 XML로부터 의도적으로 심어둔 커넥터 비밀번호를 복구했습니다. 이는 이 프리미티브를 환경 매핑 및 비밀 탈취에 유용하게 만듭니다. 복구된 자격 증명을 다운스트림 시스템에 사용하는 것은 테스트되지 않았으며 주장되지 않습니다.
선택적 서비스 거부(DoS) 부문은 번들된 Derby 데이터베이스를 정지시킵니다. 그러면 DB 기반 API 호출이 시간 초과되고, 동일한 인젝션이 자체 진입점을 해제할 수 없으며, 프로세스 재시작이 필요합니다. 이는 Derby 기반 설치에 대한 실질적인 복구 부담이며, 외부 프로덕션 데이터베이스도 동일하게 동작한다는 증거는 아닙니다.
영향을 받는 XSLT 채널이 배포되면 공격자는 Mirth 계정이 필요하지 않습니다. 들어오는 XML은 서비스가 대상 로컬 파일을 읽고 그 내용을 공격자가 제어하는 콜백으로 전송하게 만듭니다. 이는 정상 채널 응답에 변환된 데이터가 포함되지 않고 공격자가 메시지 기록을 읽을 수 없는 경우에도 유용합니다.
독립 실행형 클라이언트는 호출자가 선택한 단일 행 file: URI를 허용합니다. 호스트 식별자, 토큰, 구성 조각 또는 자격 증명과 같은 파일은 Mirth 서비스 계정이 읽을 수 있고 서버가 콜백에 도달할 수 있다면 실질적으로 가치가 있습니다. 패키지된 증명은 생성된 카나리만 사용하며, 보편적인 임의 파일 복구, 여러 행 전송 또는 서비스 계정을 넘어선 접근을 주장하지 않습니다.
느린 외부 엔티티는 또한 기본 단일 스레드 희생 채널을 점유합니다. 이는 해당 채널에 매핑된 특정 임상 인터페이스를 엔티티가 해제될 때까지 지연시키거나 중단시킬 수 있습니다. 제어 채널과 관리 API는 정상으로 유지되므로, 이는 전체 서버 중단이 아니라 채널 로컬 중단입니다.
영향을 받는 XML 배치 모드가 활성화되면, 인증되지 않은 발신자가 원시 배치 본문을 사용하여 동일한 종류의 아웃바운드 파일 공개를 트리거할 수 있습니다. 서버는 HTTP 500을 반환하지만, 공격자는 이미 OOB 콜백을 통해 대상 전용 파일 내용을 확보했습니다. 이는 응답 코드만 테스트하는 경우 요청을 파서 실패로 무시할 수 있는 상황에서도 이 결함을 블라인드 유출 경로로서 실질적으로 유용하게 만듭니다.
배치 처리는 기본적으로 꺼져 있고, 분할 모드가 XPath 기반 파서에 도달해야 하며, 서버 이그레스가 필요합니다. 이 저장소는 CVE-2026-82578에 대해 입증된 서비스 거부를 주장하지 않습니다.
요구 사항: Bash, Docker, x86-64 Linux, 그리고 초기 이미지 풀을 위한 네트워크 접근. 두 이미지 모두 다이제스트로 고정되어 있습니다. 호스트 포트는 게시되지 않으며, 대상과 공격자는 작업별 내부 Docker 브리지에서만 통신합니다.
./run-all.sh
또는 단일 취약점을 실행합니다:
./sql-selectlimit-injection/poc/run.sh
./xslt-step-xxe/poc/run.sh
./xml-batch-xxe/poc/run.sh
각 호출은 고유하게 명명된 컨테이너와 브리지 네트워크를 생성하고, evidence/current-run.log를 기록하며, 종료 시 자체 실험실 리소스를 제거합니다. 체크인된 evidence/vulnerable-4.5.2.log 파일은 x86-64 Linux 재실행의 기록입니다.
PERSON_PASSWORD 행을 내보내고 인증 없이 파일을 검색합니다. 선택적 실험실 부문은 SYSCS_FREEZE_DATABASE를 호출하며, 그 후 대상이 재시작될 때까지 DB 기반 API 호출이 응답을 중단합니다.file: URI를 허용하며, 실험실 래퍼는 무작위 카나리와 정확한 검증을 사용합니다. 동일한 실행은 정상적인 두 번째 채널과 관리 API로 채널 로컬 비가용성을 입증한 다음 복구를 검증합니다.Element Name 배치 모드를 활성화합니다. 공격자는 인증되지 않은 배치 본문만 제어합니다. 독립 실행형 클라이언트는 동일한 --file-uri 모드와 단일 행 OOB 제한을 가집니다.소유한 일회용 실험실에서만 실행하십시오. SQL PoC는 의도적으로 대상 데이터베이스를 정지시키며, 복구하려면 대상을 재시작해야 합니다. XXE PoC는 기본적으로 마운트된 카나리를 읽지만, 독립 실행형 클라이언트는 임의의 리스너 URL과 단일 행 대상 로컬 파일 URI를 허용합니다. 권한 없이 시스템을 향하게 하지 마십시오.
CISA에 따르면 Connect 4.7.2 이상으로 업그레이드하십시오. 즉시 업그레이드가 불가능한 경우, 관리 API를 신뢰할 수 있는 관리 네트워크로 제한하고, 불필요한 XSLT 단계를 제거하고, 필요하지 않은 곳에서는 XML 배치 처리를 비활성화하고, 불필요한 서버 이그레스를 차단하십시오. 이러한 조치는 노출을 줄이지만 취약한 코드를 수정하지는 않습니다.
취약점 1과 3은 Abhinav Agarwal에게 크레딧이 돌아가야 합니다. 취약점 2는 Abhinav Agarwal이 독립적으로 발견했으며 Youngdu가 NextGen에 처음 보고했습니다. NextGen이 수정 및 CVE 할당을 조정했습니다.
이 저장소는 방어자가 권고 텍스트를 관찰 가능하고 테스트 가능한 동작으로 전환하도록 돕기 위한 것입니다. 환경의 격리된 복사본에서 방어자는 이를 사용하여 다음을 수행할 수 있습니다:
_getTables 요청, 예상치 못한 Derby 내보내기 또는 정지 프로시저, public_html 아래의 새 파일, DOCTYPE을 포함하는 인바운드 XML, 리스너 오류 후 Mirth에서 발생한 콜백에 대한 탐지를 구축합니다;모든 PoC는 컨테이너에서 실행되고, 이미지를 다이제스트로 고정하며, 무작위 카나리가 반환되지 않으면 닫힌 상태로 실패합니다. 방어자는 스크린샷이나 심각도 숫자를 맹신하는 대신 실제 보안 경계를 재현할 수 있습니다. 이는 사람들이 자신이 실행 중인 것을 찾고, 테스트하고, 패치가 작동했는지 확인하도록 돕기 위해 존재합니다. 병원을 향해 겨누기 위한 것이 아닙니다.