CVE-2022-46169
비인증 명령 주입
- 게시됨
- 2022. 12. 5.
- 업데이트됨
- 2025. 10. 21.
- CNA 할당 중
- GitHub_M
- 증거 관찰됨
- 2023. 2. 16.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H높음 · 다음 30일
- 백분위수
- 100.0%
- 모델 날짜
- 2026. 9. 21.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
악용된 것으로 알려진 CISA
이 CVE는 CISA 알려진 악용 취약점 카탈로그에 나타납니다.
요약
Cacti는 사용자에게 강력하고 확장 가능한 운영 모니터링 및 장애 관리 프레임워크를 제공하는 오픈 소스 플랫폼입니다. 영향을 받는 버전에서 명령 주입 취약점으로 인해 인증되지 않은 사용자가 Cacti를 실행 중인 서버에서 임의 코드를 실행할 수 있습니다. 단, 특정 데이터 소스가 모니터링되는 장치에 대해 선택된 경우에 한합니다. 이 취약점은 `remote_agent.php` 파일에 존재합니다. 이 파일은 인증 없이 접근할 수 있습니다. 이 함수는 `get_client_addr`를 통해 클라이언트의 IP 주소를 검색하고 `gethostbyaddr`를 통해 이 IP 주소를 해당 호스트 이름으로 확인합니다. 그 후, `poller` 테이블에 호스트 이름이 확인된 호스트 이름과 일치하는 항목이 존재하는지 확인합니다. 그러한 항목이 발견되면 함수는 `true`를 반환하고 클라이언트는 인증됩니다. 이 인증은 `get_client_addr` 함수의 구현으로 인해 우회될 수 있습니다. 이 함수는 `lib/functions.php` 파일에 정의되어 있으며 클라이언트의 IP 주소를 결정하기 위해 여러 `$_SERVER` 변수를 확인합니다. `HTTP_`로 시작하는 변수는 공격자가 임의로 설정할 수 있습니다. `poller` 테이블에는 Cacti를 실행 중인 서버의 호스트 이름을 가진 기본 항목이 있으므로, 공격자는 예를 들어 `Forwarded-For: <TARGETIP>` 헤더를 제공하여 인증을 우회할 수 있습니다. 이렇게 하면 `get_client_addr` 함수는 Cacti를 실행 중인 서버의 IP 주소를 반환합니다. 이후 `gethostbyaddr` 호출은 이 IP 주소를 서버의 호스트 이름으로 확인하며, 기본 항목으로 인해 `poller` 호스트 이름 검사를 통과합니다. `remote_agent.php`의 인증이 우회된 후, 공격자는 다양한 작업을 트리거할 수 있습니다. 이러한 작업 중 하나는 `polldata`입니다. 호출된 함수 `poll_for_data`는 몇 가지 요청 매개변수를 검색하고 데이터베이스에서 해당 `poller_item` 항목을 로드합니다. `poller_item`의 `action`이 `POLLER_ACTION_SCRIPT_PHP`와 같으면 `proc_open` 함수를 사용하여 PHP 스크립트를 실행합니다. 공격자가 제어하는 매개변수 `$poller_id`는 임의의 문자열을 허용하는 `get_nfilter_request_var` 함수를 통해 검색됩니다. 이 변수는 나중에 `proc_open`에 전달되는 문자열에 삽입되어 명령 주입 취약점으로 이어집니다. 예를 들어 `poller_id=;id`를 제공하면 `id` 명령이 실행됩니다. 취약한 호출에 도달하려면 공격자는 `host_id`와 `local_data_id`를 제공해야 하며, 해당 `poller_item`의 `action`은 `POLLER_ACTION_SCRIPT_PHP`로 설정되어 있어야 합니다. 이 두 id(`host_id` 및 `local_data_id`)는 쉽게 무차별 대입(bruteforce)할 수 있습니다. 유일한 요구 사항은 `POLLER_ACTION_SCRIPT_PHP` action을 가진 `poller_item`이 존재한다는 것입니다. 이는 `Device - Uptime` 또는 `Device - Polling Time`과 같은 일부 사전 정의된 템플릿에 의해 추가되므로 운영 인스턴스에서 매우 흔합니다. 이 명령 주입 취약점을 통해 인증되지 않은 사용자는 `action` 유형이 `POLLER_ACTION_SCRIPT_PHP`(`2`)인 `poller_item`이 구성된 경우 임의의 명령을 실행할 수 있습니다. 인증 우회는 공격자가 `get_client_addr`(`lib/functions.php` 파일)가 임의의 IP 주소를 반환하도록 하는 것을 허용하지 않음으로써 방지되어야 합니다. 이는 `HTTP_...` `$_SERVER` 변수를 존중하지 않음으로써 수행할 수 있습니다. 호환성 이유로 유지해야 한다면 적어도 Cacti를 실행 중인 서버의 IP 주소를 위조하는 것을 방지해야 합니다. 이 취약점은 1.2.x 및 1.3.x 릴리스 브랜치 모두에서 해결되었으며, `1.2.23`이 패치를 포함한 첫 번째 릴리스입니다.
소스
37책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.