FlawOpen

flawopen.com/Incidents/ahsaycbs-auth-bypass-command-injection-october-2026

● Ahsay · CVE-2026-105133 · 2026-10-07 · CVSS 10.0 · 심각
보안 연구 · FlawOpen

AhsayCBS: 인증 우회에 이은 명령 주입 공격

현재 2026년 10월 12일 기준 Huntress는 AhsayCBS 10.3.4까지 영향을 받으며 10월 7일부터 공격이 관찰됐다고 보고합니다. Ahsay는 이전 수정 버전인 10.3.4.0과 9.15.2.59가 두 결함을 완전히 해결하지 못했다고 밝혔습니다. v10 파트너에게는 10.3.4.45, v7~v9 파트너에게는 9.15.2.70 핫픽스를 적용한 뒤 재부팅하라고 안내합니다. 파트너 전용 핫픽스 세부 내용은 독립적으로 검토하지 못했으므로 설치된 빌드를 확인하고 Ahsay의 최신 지침을 따르세요.[1], [8], [3], [4]

💡 알기 쉬운 설명 (ELI5)

백업 관제실의 신원 확인을 우회한 방문자가 작업자에게 메모를 건네는 상황을 떠올려 보세요. 수신 엔드포인트가 공격자 제어 입력을 운영체제 명령의 일부로 취급해, 메모가 데이터가 아니라 명령으로 해석될 수 있었습니다. 이 비유는 Huntress가 보고한 공격 연쇄를 설명하며, Ahsay의 정확한 구현은 공개되지 않았습니다.[1], [3], [4]

핵심 개념 및 용어

CVE-2026-105133
AhsayCBS의 checkSysPwd 함수에서 보고된 중간 심각도의 인증 취약점입니다. Huntress는 이를 관찰된 공격 체인의 첫 단계로 설명합니다.[3], [1]
CVE-2026-105134
/rps/api/json/UpdateReceivers.do의 Replication Receiver API에서 보고된 CVSS 10.0의 치명적인 OS 명령 주입 취약점입니다. Huntress에 따르면 인증 우회 후 코드 실행에 사용됐습니다. 10.0 점수는 이 CVE에만 해당합니다.[4], [1]
2026년 10월 12일 기준 패치 상태
CVE 기록은 처음에 10.3.4를 수정 버전으로 표시했지만 Huntress는 이후 10.3.4까지 영향을 받는다고 확인했습니다. Ahsay의 10월 10일과 12일 공지는 10월 9일 입장을 갱신하며, 이전 수정 버전 10.3.4.0과 9.15.2.59가 두 결함을 완전히 해결하지 못했다고 밝혔습니다. Ahsay는 v10 파트너에게 10.3.4.45, v7~v9 파트너에게 9.15.2.70을 적용하고 재부팅하라고 안내합니다. 이는 공급업체 지침이며 파트너 전용 핫픽스의 내용과 효과는 독립적으로 검토하지 않았습니다.[1], [8], [3], [4]

프레임워크 매핑

  • 이 가이드에서 설명하는 약점의 CWE 참조: CWE-78 CWE-287

버전 상태와 방어 조치

근거 출처출처의 내용운영자 조치
CVE 기록(10월 4일)처음에는 두 CVE 모두 10.3.4에서 수정된 것으로 표시했습니다.이 내용을 논쟁 중인 정보로 취급하고, 조치를 완료하기 전에 Ahsay에 직접 수정 여부를 확인하세요.
Huntress(10월 8일)악용을 보고했으며 10.3.4까지의 버전도 영향을 받았다고 밝혔습니다.10.3.4까지의 시스템을 잠재적 영향 대상으로 보고 관리 접근을 제한한 뒤 조사하세요.
Ahsay v10.3.4 릴리스 노트(8월 5일)두 CVE 모두와 두 취약점의 보안 수정 사항을 언급하지 않습니다.릴리스 노트만으로 10.3.4가 이 CVE들을 수정했다고 추정하지 마세요.
Ahsay v10.3.2 릴리스 노트(7월 20일)일반적인 “Ahsay Security Patchset - 2026/Q3”을 나열하지만 이 CVE나 수정된 버전은 명시하지 않습니다.일반적인 패치셋 이름을 이 CVE가 수정되었다는 증거로 간주하지 마세요. 이후 Huntress는 v10.3.4도 영향을 받는다고 보고했습니다.
모든 버전에서 침해가 의심되는 경우버전 번호만으로 과거 악용이나 지속성을 배제할 수 없습니다.호스트를 조사하고 증거를 보존하며 백업 무결성을 평가하고 신뢰할 수 있는 복구 절차를 따르세요.
Ahsay 공지(10월 10일 및 12일)이전 수정 버전 10.3.4.0과 9.15.2.59는 두 결함을 완전히 해결하지 못했습니다. Ahsay는 v10 파트너에게 10.3.4.45, v7~v9 파트너에게 9.15.2.70을 적용한 뒤 재부팅하도록 안내합니다.버전에 맞는 공급업체 지침을 따르고 재부팅한 뒤 파트너 채널에서 설치된 빌드를 확인하세요. 핫픽스 내용은 독립적으로 확인하지 않았습니다.

사고 타임라인

2026-10-04

AhsayCBS의 두 취약점에 대한 CVE 기록이 공개됐으며 처음에는 10.3.4를 수정 버전으로 표시했습니다.[3], [4]

2026-10-07 23:20:15 UTC

Huntress가 외부에 노출된 시스템을 대상으로 한 취약점 악용을 관찰하기 시작했습니다.[1]

2026-10-08

Huntress는 다섯 조직이 표적이 됐다고 보고하고 이전 버전 평가를 정정했습니다. 10.3.4도 영향을 받는다는 내용입니다.[1]

2026-10-09

10월 9일 보도 시점에는 공급업체가 수정 완료를 확인한 버전이 제시되지 않았습니다.[5]

2026-10-10

Ahsay는 v10.3.4.0이 두 결함을 완전히 해결하지 못했다고 발표하고 v10 파트너에게 10.3.4.45 핫픽스를 안내했습니다.[8]

2026-10-12

Ahsay는 지침을 갱신해 v10 파트너는 10.3.4.45, v7~v9 파트너는 9.15.2.70을 적용하고 재부팅하도록 안내했습니다.[8]

단계별 공격 실행 흐름

단계 1

외부에 노출된 관리 인터페이스에 접근

Huntress에 따르면 관찰된 활동은 인터넷에서 접근 가능한 AhsayCBS 웹 인터페이스를 겨냥했습니다. 이 제품은 관리형 서비스 제공업체와 시스템 통합업체가 사용합니다.[1]

단계 2

인증 경계를 우회

Huntress는 첫 단계를 CVE-2026-105133과 ApiStructsAction.java의 checkSysPwd 함수에 연결합니다. 이는 대응팀의 설명이며 검토한 자료에는 취약한 공급업체 소스 코드가 없습니다.[1], [3]

단계 3

Replication Receiver 결함으로 코드 실행

Huntress는 CVE-2026-105134를 /rps/api/json/UpdateReceivers.do의 명령 주입과 연결합니다. 보고서에 따르면 공격자는 receiver를 구성하고 애플리케이션이 제공하는 디렉터리에 JSP 웹셸을 배치했습니다. 요청 구문이나 payload는 재현하지 않습니다.[1], [4]

단계 4

호스트 침해 가능성을 전제로 대응

영향을 받은 사례에서 Huntress는 서비스 하위 프로세스, 웹셸, 위장된 채굴 소프트웨어와 지속성을 관찰했습니다. 관리 접근을 제한하고 호스트와 백업을 조사하며, 침해가 확인되면 신뢰할 수 있는 재구축 절차를 따르세요.[1], [6]

소스 코드 비교: 취약한 구현 vs 보안 패치

안전한 예시는 고정된 실행 파일, 명시적 허용 목록, 분리된 ProcessBuilder 인수를 사용합니다. 셸을 실행하거나 사용자 입력을 명령 문자열에 이어 붙이지 않습니다. 이는 운영체제 명령 해석 경계를 닫는 일반적인 방어 패턴이며 Ahsay 소스 코드나 패치는 아닙니다. 검토한 공개 자료에는 공급업체의 구현이나 수정 내용이 공개되어 있지 않습니다.[1], [3], [4]

취약한 구현
// 일반적인 안티패턴 예시일 뿐이며 Ahsay 소스 코드가 아닙니다.
void updateReceiver(Request request) {
    String receiver = request.parameter("receiver");
    String command = commandBuilder.forReceiverUpdate(receiver);
    operatingSystem.execute(command); // unsafe command-string boundary
}
보안 강화 패치
// 일반적인 방어 설계 예시일 뿐이며 Ahsay 패치가 아닙니다.
private static final Set<String> ALLOWED_RECEIVERS = Set.of("primary", "archive");

void updateReceiver(Principal principal, ReceiverInput input) throws IOException {
    authorization.require(principal, Permission.MANAGE_RECEIVERS);
    String receiver = input.receiverId();
    if (!ALLOWED_RECEIVERS.contains(receiver)) {
        throw new IllegalArgumentException("Unsupported receiver");
    }
    new ProcessBuilder("/usr/local/bin/replication-tool", "update", "--receiver", receiver)
        .start(); // fixed executable; separate arguments; no shell
}

엔지니어링 및 시스템 보안 강화 체크리스트

출처