[하루한줄] CVE-2020-28948/28949 : Multiple vulnerabilities through filename manipulation

URL

Archive_Tar Issue - multiple vulnerabilities through filename manipulation

Target

PEAR Archive_Tar

Explain

PEAR Archive_Tar는 PHP에서 TAR 파일을 처리하는 데 사용하는 오픈소스 라이브러리입니다. 해당 라이브러리에서 phar unseirialization과 arbitrary file overwrite 두 가지 취약점이 발견되었습니다.



첫 번째 취약점(CVE-2020-28948)은 scheme 필터링 우회를 통한 unserialization 취약점입니다.

Archive_Tar에는 unserialization 공격을 방지하기 위해 다음과 같은 코드가 존재합니다.

private function _maliciousFilename($file)
{
    if (strpos($file, 'phar://') === 0) {
        return true;
    }
    if (strpos($file, '../') !== false || strpos($file, '..\\\\') !== false) {
        return true;
    }
    return false;
}

그러나 PHAR://malicious_file.phar 과 같이 대문자로 작성하면 해당 코드를 우회해 unserialization을 통한 obejct injection이 가능합니다.

두 번째 취약점(CVE-2020-28949)은 Archive_Tar에서 stream wrapper를 체크하지 않아 발생하는 arbitrary file overwrite 취약점입니다. 이 취약점 또한 CVE-2020-28948과 같은 코드에서 발생한 취약점으로, file:// scheme에 대한 검사를 하지 않아 해커가 임의 파일을 덮어쓸 수 있습니다. php가 루트 권한으로 실행되었다면 /etc/passwd 파일을 포함한 시스템 파일 또한 덮어쓸 수 있습니다.

private function _maliciousFilename($file)
{
    if (strpos($file, '://') === 0) {
        return true;
    }
    if (strpos($file, '../') !== false || strpos($file, '..\\\\') !== false) {
        return true;
    }
    return false;
}

이 두 취약점은 문자열에 phar:// 가 아닌 :// 가 포함될 경우 이를 필터링하는 방식으로 패치되었습니다.