CVE-2023-46818

agnusdei·3일 전

CVE-2023-46818 취약점의 메커니즘, 취약점 코드의 동작 방식, 페이로드 구조 및 모의 침투(Penetration Testing) 관점에서의 분석입니다.


1. 취약점 개요 및 근본 원인 (Root Cause)

이 취약점은 ISPConfig의 관리자 인터페이스인 /admin/language_edit.php 스크립트에서 발생합니다.

  • 취약한 기능: ISPConfig의 언어 파일 편집기(Language File Editor)
  • 취약점 분류: CWE-94 (Improper Control of Generation of Code) / PHP Code Injection
  • 근본 원인:
    웹 애플리케이션이 언어 파일(번역 파일)을 저장하는 과정에서, 사용자가 전송한 records POST 매개변수 데이터를 제대로 검증(Sanitization)하거나 적절히 이스케이프(Escaping) 처리하지 않은 채 PHP 소스 코드 문자열 형태로 조합하여 저장하기 때문입니다.

2. 취약점 메커니즘 상세 분석

ISPConfig의 언어 파일 저장 로직은 언어 변수를 PHP 배열 형식(예: $wb['key'] = 'value';)으로 파일에 동적으로 기록합니다.

  1. 입력 처리:
    공격자가 /admin/language_edit.php로 HTTP POST 요청을 보낼 때 records[...] 배열 형태로 번역 문자열 데이터를 전달합니다.
  2. 이스케이프 미흡:
    애플리케이션은 제출된 입력값을 PHP 파일로 작성할 때 따옴표(' 또는 ") 처리나 백슬래시(\) 처리를 완전하게 파싱하지 못합니다.
  3. 코드 주입 및 저장:
    공격자가 배열 키(Key) 또는 값(Value) 인자에 PHP 코드를 닫고 새로운 명령을 실행하는 문법(예: '; system($_GET['cmd']); $a=')을 삽입하면, 해당 내용이 /admin/lib/lang/ 또는 해당 모듈의 lang/*.lng 파일에 그대로 기록됩니다.
  4. 코드 실행:
    이후 해당 언어 파일이 ISPConfig에 의해 include 또는 require 되는 순간, 주입된 PHP 코드가 평가(Evaluate)되면서 서버 권한으로 실행됩니다.

3. Exploit Payload 및 HTTP Request 구조

Nuclei 템플릿 및 PoC 분석 기반의 공격 요청 예시입니다.

HTTP Request 예시

POST /admin/language_edit.php HTTP/1.1
Host: target-ispconfig.com
Content-Type: application/x-www-form-urlencoded
Cookie: session_id=...

lang=en&module=help&lang_file=en_help.lng&_csrf_id=[CSRF_ID]&_csrf_key=[CSRF_KEY]&records[\']]=<?php system($_GET['cmd']); ?>
  • records 매개변수에 백슬래시(\) 또는 싱글 쿼트(')를 이용해 기존 문법 구문을 빠져나온 후 PHP 태그(<?php ... ?>)나 PHP 함수(system, passthru, exec)를 주입합니다.
  • 업로드된 파일 위치로 직접 HTTP GET 요청을 보내거나 해당 언어 페이지를 리로드함으로써 웹쉘(WebShell) 명령을 실행합니다.

4. 모의 침투 및 취약점 진단 관점 (Penetration Testing Focus)

  • Prerequisites (전제 조건):
  1. Authenticated Admin Access: ISPConfig 관리자 웹 콘솔 로그인 권한 필요.
  2. Configuration Check: admin_allow_langedit 옵션 활성화 필요 (1 또는 true).
  • Post-Exploitation 영향:
  • Executing Context: 웹 서버 사용자(예: www-data 또는 ispconfig) 권한으로 arbitrary OS command 실행.
  • Vertical Privilege Escalation: ISPConfig 프로세스는 시스템 관리를 위해 Cron job이나 Sudoers 설정을 통해 root 권한 명령을 수행하는 경우가 많아, 로컬 권한 상승(LPE)으로 이어질 위험성이 매우 높음.
  • 보안 장비(WAF/IDS) 탐지 패턴:
  • /admin/language_edit.php로 향하는 POST 요청 중 records 파라미터 내 <?php, system(, eval(, passthru( 등 PHP 실행 패턴 포함 여부 검사.

5. 패치 분석 (Remediation)

패치 버전인 3.2.11p1에서는 다음과 같은 조치가 적용되었습니다.

  1. 입력값 산티타이징 강화: language_edit.php 내부에서 입력받은 records 데이터의 특수문자 이스케이프 로직 보완.
  2. 권한 및 설정 제어: admin_allow_langedit 설정이 꺼져 있을 경우 언어 편집기 접근을 엄격히 통제.

0개의 댓글