CDNetworks를 무료로 체험하세요
대부분의 제품에는 14일간의 무료 체험이 제공됩니다. 신용카드가 필요하지 않습니다.
WordPress 백업 마이그레이션 플러그인은 WordPress 웹사이트의 백업 및 마이그레이션 프로세스를 단순화하고 사용하기 쉬운 다양한 기능을 제공하는 강력한 도구입니다.
최근 CDNetworks Security Lab은 1.3.8 이전 버전의 Backup Migration 플러그인에서 원격 코드 실행 취약점을 발견했습니다. 이 취약점은 CVSS 3.1에서 9.8 등급으로 위험 수준이 심각합니다. 이를 통해 악의적인 공격자는 백도어 액세스를 통해 대상 웹사이트에서 원격으로 명령을 실행하여 사이트를 완전히 제어할 수 있습니다.
이 취약점을 악용하기 위한 조건은 비교적 간단하지만 광범위한 영향을 미칩니다. 악용을 방지하려면 기업은 이 플러그인의 버전을 확인하고 관련 취약점을 수정하거나 더 나아가 웹 보호 솔루션을 도입해야 합니다.
이 빠른 가이드에서는 취약점에 대한 분석을 진행합니다.
취약점은 플러그인 파일 /includes/backup-heart.php에 존재합니다. 이 취약점을 복제하는 첫 번째 단계는 이 파일을 찾아 중단점을 설정하는 것입니다. 그런 다음 데이터를 /wp-content/plugins/backup-backup/includes/backup-heart.php 경로로 전송하여 동적 디버깅을 수행합니다. 서버가 데이터를 수신하면 요청 헤더 데이터가 변수 $fields에 저장되어 있음을 알 수 있습니다.
계속해서 $필드의 필드 값이 상수로 정의되어 있음을 알 수 있습니다. 여기서 주요 초점은 BMI_ROOT_DIR 및 BMI_INCLUDES 상수에 있습니다. BMI_ROOT_DIR 값은 요청 헤더의 content-dir 값에 의해 결정되며 BMI_INCLUDES 값은 BMI_ROOT_DIR과 "includes"를 연결하여 구성됩니다.
또한 BMI_INCLUDES는 "bypasser.php"와 연결되어 require_once 함수를 이용하여 포함되어 있는 것으로 확인되었습니다. 결과적으로 require_once의 매개변수를 제어할 수 있으므로 이는 일반적인 파일 포함 취약점이 됩니다.
일부 인코딩에서는 고정 접두사가 인코딩의 시작 문자로 사용됩니다. 다음은 다양한 인코딩에 대한 문자입니다. 예를 들어 한국어 문자 인코딩(ISO-2022-KR)에서 인코딩된 메시지는 “\x1b$)C” 시퀀스로 시작해야 합니다.
인코딩 식별자 | 앞에 붙는 문자 |
---|---|
ISO2022KR | \x1b$)C |
UTF16 | \xff\xfe |
UTF32 | \xff\xfe\x00\x00 |
전 세계적으로 거의 7,000개의 언어가 사용됩니다. 글로벌 인터넷 커뮤니케이션을 촉진하려면 다양한 인쇄 가능한 문자가 필요합니다.
기본 ASCII 인코딩 테이블은 잘 알려져 있지만 제한 사항이 있습니다. 일본어 문자를 표시할 수 없으며 그리스 알파벳의 “λ”, “ν”, "π"와 같은 기호를 포함할 수 없습니다. 다른 언어의 문자와 “☺” 같은 이모티콘을 표시하기 위해 다양한 인코딩 테이블이 개발되었습니다.
이러한 인코딩 테이블은 문자를 한 언어에서 다른 언어로 변환할 수 있습니다. 변환 프로세스는 인코딩 길이, 접두사 문자 등의 요소에 영향을 받으며 새 문자가 생성될 수도 있습니다.
호스트에서는 iconv -l을 사용하여 지원되는 인코딩 변환 테이블을 볼 수 있습니다.
이 변환표는 php://convert.iconv.. 필터를 통해 사용할 수 있습니다. 예를 들어, Convert.iconv.CP861.UTF-16은 파일의 문자 인코딩을 CP861에서 UTF-16으로 변환하는 것을 의미합니다.
다음 코드 예제에서는 문자열 "START"를 ‘CP861’, ‘UTF16’, ‘L4’ 및 ‘GB13000’ 인코딩을 통해 변환하여 문자열 시작 부분에 새 문자 'B’를 삽입할 수 있습니다.
그렇다면 인코딩 변환 중에 생성된 정크 문자를 어떻게 처리합니까? PHP에서 base64 디코딩에는 ‘0-9’, ‘a-z’, ‘A-Z’, ‘/’, ‘+’ 및 패딩 문자 '='만 인식하는 기능이 있습니다. 디코딩할 문자열에 다른 문자가 포함되어 있으면 PHP는 이러한 문자를 직접 무시하고 인식 가능한 나머지 문자를 연결하여 디코딩합니다. 예를 들어:
보시다시피, 디코딩하는 동안 문자열의 '@&>>_'와 같은 문자는 자동으로 무시됩니다. 느슨하게 구문 분석된 base64 디코딩을 사용하여 인코딩 변환 프로세스 중에 생성된 정크 문자를 제거할 수 있습니다. 정크 문자에 Convert.base64-decode 필터의 디코딩에 영향을 미칠 수 있는 '='가 포함된 경우 UTF-7 인코딩을 사용하여 디코딩에 영향을 주지 않고 ‘=’ 기호를 다른 기호로 변환할 수 있다는 점에 유의하는 것이 중요합니다. Convert.base64-decode 필터 중 하나입니다.
위의 방법을 사용하면 임의의 base64 문자를 생성할 수 있습니다. 생성된 base64 문자를 디코딩한 후 원본 문자를 얻을 수 있습니다. 마지막으로 생성된 원래 페이로드를 php://filter/{filter}/resource=php://temp로 연결합니다(resource=php://temp를 지정하면 경로가 유효한지 확인하기 위해 모든 .php 파일을 추가할 수 있습니다). 페이로드는 파일에 기록되고, require_once를 사용하여 파일을 포함함으로써 코드 실행에 파일이 포함됩니다.
GitHub에서 작성자는 php://convert.iconv.. 필터를 사용하여 해당 base64 문자를 빠르게 생성할 수 있는 인코딩 변환 도구를 작성했습니다。
이 스크립트에 의해 생성된 페이로드는 요청 헤더 content-dir의 값으로 설정됩니다.
인코딩 변환 후 생성된 악성코드가 성공적으로 작성 및 포함되어 파일 포함부터 코드 실행까지의 과정이 완료된 것으로 확인됩니다.
WordPress 6.4.3 + 백업 마이그레이션 플러그인 1.3.6을 사용하여 로컬로 설정합니다。php_filter_chain 도구를 사용하여 페이로드 코드를 생성하세요。 아웃.txt`; ?>` 명령。
(https://github.com/synacktiv/php_filter_chain_generator/blob/main/php_filter_chain_generator.py)
결과를 요청 헤더의 content-dir 값으로 복사하고 데이터 패킷을 http://localhost/wordpress/wp-content/plugins/backup-backup/includes/backup-heart.php 경로로 보냅니다。
http://localhost/wordpress/wp-content/plugins/backup-backup/includes/out.txt에 액세스하세요。그러면 시스템 명령 날짜의 실행 결과가 out.txt 파일에 기록된 것을 확인할 수 있습니다。
그만큼 최신 버전의 백업 마이그레이션 플러그인 이 문제가 해결되었으므로 최대한 빨리 최신 버전으로 업데이트하는 것이 좋습니다。
CDNetworks의 클라우드 WAF 이 취약점 악용에 대한 즉각적인 보호를 제공합니다。다른 변종 공격 방법과 다양한 구성 요소 취약점을 지속적으로 조사 및 분석하여 기업의 "취약점 창"을 최소화하기 위해 보호 규칙을 즉시 배포합니다。
최근 몇 달 동안 CDNetworks는 클라우드 보안 솔루션을 다음으로 업그레이드했습니다。클라우드 보안 2.0,WAF의 몇 가지 주요 기능을 소개합니다。
CDNetworks는 이러한 기능을 통합함으로써 APAC 지역 기업의 진화하는 보안 요구 사항을 충족하고 경쟁이 치열한 시장에서 조직을 보호하는 것을 목표로 합니다。
CDNetworks의 서버리스 엣지 컴퓨팅 솔루션인 엣지 애플리케이션을 소개합니다. 작동 방식, 주요 이점, 그리고 실제 사용 사례를 알아보세요.
2024년 10월 24일, CDNetworks는 동남아시아에 대규모 사용자 기반을 둔 브라우저 게임 플랫폼을 타겟으로 한 대규모 DDoS 공격을 성공적으로 완화했습니다. 이 공격은 네트워크 계층에서 1.24Tbps에 도달했고 애플리케이션 계층에서 수백만 QPS를 넘어섰습니다.