
소개 – 알려지지 않은 것을 탐험하다: 패치되지 않은 WordPress SSRF의 표면 아래
끊임없이 진화하는 사이버 보안 환경에서 WordPress는 광범위한 사용과 광범위한 플러그인 생태계로 인해 여전히 인기 있는 대상입니다. WordPress 핵심은 일반적으로 안전하지만 취약성은 종종 타사 플러그인과 테마에서 발생합니다. 주목을 받고 있는 그러한 취약성 중 하나는 Server-Side Request Forgery(SSRF) 취약성입니다. 이 블로그 게시물에서는 패치되지 않은 WordPress SSRF 취약성의 복잡성, 그 의미, 그리고 WP-Firewall이 이러한 위협으로부터 WordPress 사이트를 보호하는 데 어떻게 도움이 될 수 있는지 자세히 살펴보겠습니다.
## 근본 원인: wp_http_validate_url()
2022년 9월, SonarSource는 패치되지 않은 WordPress Core Unauthenticated Blind SSRF에 대한 권고안을 발표했습니다. 이 취약점의 근본 원인은 DNS 리바인딩 공격에 취약한 `wp_http_validate_url()` 함수에 있습니다. WordPress 코어 자체는 직접 영향을 받지 않지만 이 취약한 함수를 활용하는 플러그인은 위험에 처해 있습니다.
wp_http_validate_url() 이해하기
`wp_http_validate_url()` 함수는 리디렉션 및 요청 위조 공격을 방지하기 위해 URL을 검증하도록 설계되었습니다. 그러나 DNS 재바인딩 공격으로부터 보호하는 데는 부족하여 SSRF 취약성에 대한 잠재적 벡터가 됩니다. 이 함수는 종종 `wp_remote_get()` 및 더 안전한 대안인 `wp_safe_remote_get()`와 함께 사용됩니다.
명확한 부분: wp_remote_get() 및 wp_safe_remote_get()
`wp_remote_get()` 함수는 일반적으로 서버를 통해 원격 호스트를 요청하는 데 사용됩니다. 그러나 이 함수에 사용자 입력 URL을 전달하면 SSRF 취약성이 발생할 수 있다는 것은 잘 알려진 사실입니다. 이러한 위험을 완화하기 위해 WordPress는 SSRF 공격을 방지하기 위한 추가 검증을 포함하는 `wp_safe_remote_get()`를 도입했습니다.
wp_safe_remote_get()은 얼마나 안전한가요?
`wp_safe_remote_get()` 함수는 `wp_remote_get()`보다 안전한 대안으로 설계되었습니다. 공식 WordPress 문서에 따르면:
"이 기능은 임의의 URL에 HTTP 요청이 이루어질 때 이상적입니다. 리디렉션 및 요청 위조 공격을 방지하기 위해 URL이 검증됩니다."
그러나 이 함수의 안전성은 기본 함수인 `wp_http_validate_url()` 함수에 의해 제한되는데, 앞서 언급했듯이 이 함수는 DNS 리바인딩 공격에 취약합니다.
기능에 뛰어들기
`wp_safe_remote_get()`의 소스 코드는 다음과 같습니다.
페프
함수 wp_safe_remote_get( $url, $args = 배열() ) {
$args['거부_안전하지 않은_URL'] = true;
$http = _wp_http_get_object();
$http->get( $url, $args )를 반환합니다.
}
2번째 줄에서 `$args['reject_unsafe_urls']` 매개변수는 `true`로 설정되어 결국 URL을 요청하기 전에 사용자 입력을 `wp_http_validate_url()` 함수로 전달합니다. `wp_http_validate_url()`는 DNS 리바인딩 공격에 취약하므로 검증을 위해 이것에만 의존하는 모든 함수도 취약합니다.
취약점의 한계
이것은 본격적인 SSRF는 아니지만 `wp_http_validate_url()` 함수에 의해 설정된 제한이 있습니다.
– 프로토콜은 `http://` 또는 `https://` 중 하나여야 합니다.
– 포트는 80, 443 또는 8080 중 하나만 가능합니다.
이러한 제한에도 불구하고 SSRF를 통해 이러한 경계 내의 내부 호스트를 요청하는 것이 가능합니다.
취약한 플러그인 코드
취약한 플러그인 코드의 몇 가지 예는 다음과 같습니다.
비맹목적 SSRF
페프
<?php
require_once('wp-load.php');
$url = $_GET['url'];
$response = wp_safe_remote_get( $url );
$response = wp_remote_retrieve_body( $response );
에코 $response;
?>
플러그인이 사용자 입력을 받아 `wp_safe_remote_get()` 함수에 전달한 다음 응답을 표시하는 경우, 블라인드 제한 SSRF에 취약합니다.
블라인드 SSRF
페프
<?php
require_once('wp-load.php');
$url = $_GET['url'];
$response = wp_safe_remote_get( $url );
$response_code = wp_remote_retrieve_response_code( $response );
if ($response_code == 200) {
echo "작동 중";
} 또 다른 {
echo "다운되었거나 찾을 수 없습니다!";
}
?>
플러그인이 사용자 입력을 `wp_safe_remote_get()`에 전달하지만 응답 코드/상태만 반환하는 경우 블라인드 SSRF에 취약하여 영향이 내부 호스트의 포트 80, 443 또는 8080에 대한 포트 스캐닝으로 제한됩니다.
공격 시범
이 취약성을 입증하기 위해, 우리는 포트 80에서 WordPress를 실행하는 Apache 서버와 일부 비밀 정보를 사용하여 localhost:8080에서 실행되는 PHP 서버에 공격을 수행했습니다. 취약한 코드는 플러그인 디렉토리 `/wp-content/plugins/vulnerable-plugin/index.php`에 삽입되었습니다.
GitHub 저장소
여기에서 취약한 Docker 인스턴스와 이 취약성을 이용해 플레이할 수 있는 악용 스크립트를 찾을 수 있습니다. GitHub 저장소. 출처: Ananda Dhakal
## 더 취약한 기능
동일한 취약점은 유효성 검사를 위해 `wp_http_validate_url()`에 의존하는 다른 함수에도 적용됩니다.
– `wp_safe_remote_request()`
– `wp_safe_remote_post()`
– `wp_safe_remote_head()`
또한 일부 함수는 `wp_safe_remote_get()`에 대한 래퍼 역할을 하며 어느 정도 취약합니다.
– `WP_REST_URL_세부정보_컨트롤러::원격_URL_가져오기()`
– `다운로드_URL()`
– `wp_remote_fopen()`
– `WP_oEmbed::발견()`
결론
SSRF 취약성으로부터 보호하도록 설계되고 안전한 것으로 간주되는 기능이 전적으로 완벽하지는 않다는 것은 분명합니다. DNS 재바인딩 공격에 취약한 `wp_http_validate_url()`에 대한 의존성은 WordPress 사이트를 잠재적인 SSRF 공격에 노출시킵니다. WordPress Core 팀에서 이 문제를 해결하고 플랫폼의 보안을 강화하기 위한 패치를 릴리스할 것을 촉구합니다.
WP-Firewall이 어떻게 도움이 될 수 있는가
WP-Firewall에서는 새로운 위협으로부터 WordPress 사이트를 보호하는 것이 얼마나 중요한지 잘 알고 있습니다. 당사의 포괄적인 보안 솔루션은 SSRF 공격을 포함한 광범위한 취약점으로부터 강력한 보호를 제공하도록 설계되었습니다. WP-Firewall이 WordPress 사이트를 보호하는 데 도움이 되는 방법은 다음과 같습니다.
실시간 위협 탐지
WP-Firewall은 의심스러운 활동과 잠재적인 취약성을 위해 사이트를 모니터링하는 실시간 위협 탐지 기능을 제공합니다. 당사의 고급 알고리즘은 SSRF 시도를 식별하고 차단하여 사이트가 안전하게 유지되도록 할 수 있습니다.
정기 보안 감사
당사의 보안 전문가 팀은 WordPress 사이트와 플러그인에 대한 정기적인 감사를 실시하여 취약점을 식별하고 해결합니다. 잠재적 위협에 앞서 나가면서 사용자를 위한 안전한 환경을 유지하는 데 도움을 드립니다.
자동화된 패치 관리
WordPress 코어, 테마, 플러그인을 최신 상태로 유지하는 것은 보안에 필수적입니다. WP-Firewall은 자동화된 패치 관리를 제공하여 사이트의 모든 구성 요소가 최신 보안 패치로 업데이트되도록 합니다.
사용자 정의 방화벽 규칙
WP-Firewall을 사용하면 특정 요구 사항에 맞게 사용자 정의 방화벽 규칙을 만들 수 있습니다. 악성 요청과 무단 액세스 시도를 차단하는 규칙을 구현하여 사이트의 보안을 강화할 수 있습니다.
종합 보고
자세한 보안 보고서는 감지된 위협과 사이트를 보호하기 위해 취한 조치에 대한 통찰력을 제공합니다. WP-Firewall을 사용하면 항상 WordPress 사이트의 보안 상태를 파악할 수 있습니다.
WP-Firewall을 사용하여 SSRF로부터 보호
SSRF 취약점을 구체적으로 해결하기 위해 WP-Firewall은 다음과 같은 기능을 제공합니다.
입력 검증
WP-Firewall은 사용자가 제공한 URL이 안전하고 악의적인 의도가 없는지 확인하기 위해 엄격한 입력 검증을 수행합니다. 여러 수준에서 입력을 검증함으로써 SSRF 공격이 취약한 기능을 악용하는 것을 방지합니다.
DNS 리바인딩 보호
저희 방화벽에는 DNS 리바인딩 취약성을 악용하려는 시도를 탐지하고 차단하는 DNS 리바인딩 보호 메커니즘이 포함되어 있습니다. 이를 통해 `wp_http_validate_url()`와 같은 기본 함수가 취약하더라도 사이트가 안전하게 유지됩니다.
보안 API 요청
WP-Firewall은 엄격한 검증 및 인증 조치를 시행하여 API 요청을 보호합니다. 이를 통해 무단 액세스를 방지하고 API 엔드포인트를 표적으로 삼는 SSRF 공격의 위험을 완화합니다.
지속적인 모니터링
당사의 지속적인 모니터링 기능은 귀하 사이트의 트래픽과 활동을 면밀히 감시합니다. 의심스러운 행동은 플래그가 지정되고 즉시 처리되어 SSRF 공격의 성공 위험을 최소화합니다.
행동 촉구
패치되지 않은 WordPress SSRF 취약성은 상당한 위험을 초래하지만, 사전 조치를 통해 영향을 완화할 수 있습니다. WP-Firewall의 포괄적인 보안 솔루션을 활용하면 WordPress 사이트를 SSRF 공격 및 기타 새로운 위협으로부터 보호할 수 있습니다. 잠재적인 취약성을 미리 파악하고 WP-Firewall로 사용자에게 안전한 환경을 보장하세요.
보안 침해가 발생하여 조치를 취할 때까지 기다리지 마세요. 오늘 WP-Firewall로 WordPress 사이트를 보호하세요. 무료 체험판을 시작하세요 강력하고 실시간적인 보호로 마음의 평화를 경험해보세요.
WP-Firewall이 WordPress 사이트를 보호하는 데 어떻게 도움이 될 수 있는지에 대한 자세한 내용은 다음을 방문하세요. 웹사이트 또는 당사 지원팀에 문의하세요.
안전을 유지하고 보안을 유지하며 WP-Firewall로 WordPress 사이트를 보호하세요.
—
주간 보안 조언
최신 WordPress 보안 정보를 이메일로 받아보세요. 뉴스레터를 구독하세요 WordPress 사이트를 보호하기 위한 최신 위협과 모범 사례에 대한 정보를 받아보세요.
보안 권고 사항의 최신 소식
최신 보안 권고 사항을 모두 확인하고 WordPress 플러그인과 테마에 영향을 미치는 심각한 취약점에 대한 최신 정보를 받아보세요.
– 2024년 5월 19일: WordPress 취약점 보고서(2024년 5월 6일~2024년 5월 12일)
– 2024년 5월 15일: Uncode Core 플러그인에서 높은 우선 순위 취약점 패치됨