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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2023-1430 — WPManageNinja의 FluentCRM에서 패치되지 않은 취약점에 대한 책임 있는 공개 | Kitploit
도구/GitHubGitHub/karlemilnikka/cve-2023-1430
Authentication & AuthorizationVulnerability AnalysisWeb SecurityPapers & ResearchMisconfigurationLearning & Education
GitHubkarlemilnikka/cve-2023-1430

CVE-2023-1430

WPManageNinja의 FluentCRM에서 패치되지 않은 취약점에 대한 책임 있는 공개

저장소 보기
12년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

업데이트 2023-06-12: 더 이상 스니펫이 필요하지 않습니다. WPManageNinja는 공개 공개 후 2시간 만에 취약점을 패치했습니다(신고 후 93일).

업데이트 2024-01-27: 영원한 해시 값과 관련된 문제가 이제 완전히 해결되었습니다.

WPManageNinja의 FluentCRM에서 발견된 미패치 취약점 CVE-2023-1430의 책임 있는 공개

tl;dr 공격자가 FluentCRM에서 연락처 세부 정보를 보고 편집할 수 있습니다. WPManageNinja는 90일 책임 공개 기간 내에 취약점을 패치하지 않았습니다. 공식 패치를 기다리는 동안 취약점 악용을 방지하기 위한 완화 스니펫을 제공합니다.

  • 취약점: CVE-2023-1430 해시를 권한 부여 제어로 부적절하게 사용
  • CVSS: 6.5 (중간)
  • 소프트웨어: FluentCRM
  • 영향을 받는 버전: 2.7.40에서 발견됨
  • 패치된 버전: 2.8.02
  • 개발사: WPManageNinja
  • 연구자: Karl Emil Nikka, Nikka Systems (Wordfence를 통해 신고)
  • 공개 게시일: 2023-06-12
  • 마지막 업데이트: 2023-06-12

개요

오늘, WPManageNinja의 인기 WordPress 플러그인 FluentCRM에서 발견한 취약점에 대한 정보를 공개합니다. 취약점 CVE-2023-1430은 FluentCRM이 이메일 주소 해시를 권한 부여 제어로 부적절하게 사용하여 발생합니다. Google Zero의 취약점 공개 정책에 따라 책임 있게 공개했습니다. WPManageNinja는 90일 이내에 패치를 제공하지 않았으며 기한 연장을 요청하지도 않았습니다.

이 보고서에서 _contact_는 FluentCRM 접촉 객체를, _user_는 WordPress 사용자 객체를 의미합니다. 접촉은 사용자와 연결될 수 있지만 필수는 아닙니다. 취약점 악용에 대한 세부 정보는 공식 패치가 제공될 때까지 보류됩니다. 보안 전문가는 전체 보고서를 위해 저에게 연락할 수 있습니다 ([email protected]).

일반적인 영향 및 필요한 조치

FluentCRM이 실행 중인 사이트에서 공격자는 연락처의 이메일 주소를 알면 이름, 이메일 주소, 목록 설정을 보고 편집할 수 있습니다. 연락처 이름은 종종 뉴스레터에 병합 태그로 포함되므로, 공격자는 연락처 이름을 욕설로 바꿔 웹사이트 소유자가 저속한 뉴스레터를 보내도록 할 수 있습니다. 웹사이트 관리자가 FluentCRM의 환경 설정 관리 단축 코드를 활성화하고 공개 웹 페이지에 추가한 경우, 공격자는 노출된 모든 개인 정보(제목, 전화번호, 생년월일, 주소 등, FluentCRM 구성에 따라 다름)를 보고 편집할 수 있습니다.

FluentCRM은 30,000개 이상의 사이트에 설치되어 있습니다. FluentCRM 사이트 관리자는 자식 테마의 functions.php 파일에 제 완화 스니펫을 추가하여 취약점 악용을 방지할 수 있습니다.

스니펫은 취약점을 패치하지 않습니다. FluentCRM의 구독 취소 페이지(unsubscribe.php)와 환경 설정 관리 페이지(manage_subscription.php)의 취약한 콘텐츠를 오류 메시지로 대체하여 연락처가 대신 이메일로 문의하도록 안내합니다. 오류 메시지의 이메일 주소는 사이트 관리자 이메일 주소입니다(스니펫에서 변경 가능). 완화 스니펫은 또한 로그인하지 않은 방문자가 FluentCRM의 취약한 환경 설정 관리 단축 코드(fluentcrm_pref)를 렌더링하지 못하도록 합니다. 로그인하지 않은 방문자는 대신 로그인하라는 오류 메시지를 보게 됩니다. 모든 문자열은 제공된 POT 파일로 번역 가능합니다.

필요한 조치

웹사이트 소유자에게 제가 제공하는 완화 조치 또는 자체 완화 조치를 구현할 것을 권장합니다. 웹사이트 소유자는 FluentCRM 연락처 데이터의 무결성을 확인하고, 가능하다면 로그에서 잠재적인 데이터 유출을 확인해야 합니다. 특히 다음 사이트의 경우 로그 확인이 중요합니다:

  • 연락처의 등록된 이름이 민감한 정보인 사이트
  • FluentCRM의 환경 설정 관리 단축 코드가 공개 페이지에 있거나 있었던 사이트 (로그인하지 않은 방문자 대상)
  • 목록 관리가 활성화되어 있고 연락처가 구독하는 목록의 이름이 민감한 정보인 사이트

웹사이트의 지정된 데이터 컨트롤러는 해당 관할권의 법률 및 규정에 따라 개인 정보의 잠재적 데이터 유출을 처리해야 합니다.

추가적인 잠재적 영향

FluentCRM이 연락처 설정을 해당 사용자와 동기화하도록 구성된 경우, 공격자는 사용자 이름을 변경할 수 있습니다. 다행히 FluentCRM은 연락처에서 사용자로 이메일 주소를 동기화하지 않습니다. 만약 그랬다면 이 취약점으로 인해 전체 사이트가 장악될 수 있었을 것입니다. 공격자는 사이트 관리자의 이메일 주소를 변경한 다음 관리자 비밀번호를 재설정하여 권한 있는 접근을 얻을 수 있었을 것입니다.

그러나 다른 솔루션(예: WP Fusion 및 FluentCRM의 API)은 연락처에서 사용자로 모든 메타데이터를 동기화할 수 있습니다. WP Fusion은 아마도 CRM(예: FluentCRM)과 WordPress 간에 연락처 메타데이터를 동기화하는 가장 인기 있는 타사 플러그인일 것입니다. 다행히 현재 버전의 WP Fusion은 취약한 양식에서 시작된 메타데이터 변경에 연결되어 있지 않습니다. WP Fusion 개발자에게 알렸으며, WPManageNinja가 취약점을 패치할 때까지 이 제한 사항을 해결하지 않을 것입니다.

FluentCRM의 API를 사용하여 연락처 및 사용자 데이터를 업데이트할 수도 있습니다. FluentCRM의 API를 사용하여 사용자 이메일 주소를 업데이트하는 사이트 소유자는 FluentCRM의 페이지 또는 환경 설정 관리 단축 코드에서 시작된 업데이트를 비활성화해야 합니다(또는 취약한 양식에서 설정을 업데이트할 수 없도록 제 완화 스니펫을 추가).

취약점 악용

FluentCRM은 공개 웹 페이지에서 연락처가 구독을 취소하고 환경 설정을 관리할 수 있도록 합니다. 이 페이지에 대한 링크는 모든 뉴스레터에 포함됩니다. 이 페이지에서 이루어진 변경 사항은 URL 매개변수로 전달되는 연락처 이메일 주소의 MD5 해시로 승인됩니다. 이메일 주소의 MD5 해시는 비밀이 아니며 누구나 계산할 수 있습니다. 공격자는 해시의 잘못된 사용을 악용하여 특정 연락처를 구독 취소하거나 알려진 이메일 주소를 가진 연락처를 대량으로 구독 취소할 수 있습니다.

구독 취소 페이지는 전적으로 MD5 해시에 의존하는 반면, 환경 설정 관리 페이지는 ce_id라는 추가 URL 매개변수가 필요합니다. 이 경우 ce_id는 fc_subscribers 테이블에 있는 연락처의 ID를 나타냅니다. 이 ID는 증가하는 정수입니다. 따라서 ce_id 값은 가능한 모든 값을 테스트하여 쉽게 찾을 수 있습니다(검색 공간은 사이트에 등록된 연락처 수입니다). 관리자 사용자는 낮은 값을 가질 가능성이 높습니다.

환경 설정 관리 페이지에서 공격자는 연락처의 secure_hash 값도 유출할 수 있습니다. 연락처의 이메일 주소를 업데이트하면 연락처의 "secure_hash" 값이 fc_hash_secure라는 쿠키에 저장됩니다. 이 쿠키가 설정되면 공격자는 FluentCRM의 환경 설정 양식 단축 코드에서 제공하는 모든 연락처 정보를 표시할 수 있습니다.

관련된 사소한 문제: 영원한 해시 값

앞서 언급한 "secure_hash"는 FluentCRM이 (일부 상황에서) MD5 이메일 주소 해시 대신 또는 대안으로 의존하는 값입니다. FluentCRM 2.8.0 릴리스 이후 구독 취소 페이지는 전적으로 secure_hash 값에 의존하여 승인합니다. 환경 설정 관리 페이지는 새 secure_hash 값과 이전 MD5 이메일 주소 해시를 모두 승인에 허용합니다.

secure_hash 값은 이메일 주소에서 파생될 수 없지만, FluentCRM의 사용 방식은 좋은 보안 관행을 따르지 않습니다. secure_hash 값은 연락처당 한 번 생성됩니다. 절대 업데이트되지 않으며 만료되지 않습니다. 이는 secure_hash 값이 모든 뉴스레터에 포함되기 때문에 문제가 됩니다. 공격자가 연락처의 받은 편지함에 접근할 수 있다면, 공격자는 연락처의 설정을 무기한 변경할 수 있습니다. 영향을 받는 연락처가 관리자 권한이 있는 사용자와 연결되어 있고 이메일 주소 변경이 FluentCRM에서 WordPress로 동기화된다면, 이 연락처에 전송되는 모든 뉴스레터에는 사이트를 장악할 수 있는 만료되지 않는 토큰이 포함됩니다.

이 관련 문제를 2023-03-15에 WPManageNinja에 보고했습니다. 두 달 후(2023-05-15), WPManageNinja는 보안 자문가들이 정적 secure_hash 값을 문제로 간주하지 않는다고 답변했습니다. WPManageNinja의 보안 자문가들은 "연락처를 식별하기 위해 이 유형의 일회성 생성 토큰을 사용하는 것이 괜찮다"며 "SaaS 서비스의 API 토큰과 유사하며, 이는 다른 연락처에 전달되지 않고 실제 이메일 주소 소유자에게만 전송된다"고 말했습니다.

WPManageNinja는 열린 태도를 보였으며, 여전히 보안 문제라고 생각되면 알려달라고 했고, 저는 그렇게 했습니다. secure_hash 값을 API 토큰과 비교할 수 없는 이유를 설명했습니다. (API 토큰은 TLS 연결을 통해서만 전송되도록 할 수 있으며, API 토큰에 대한 접근을 제한할 수 있습니다. 이메일의 일반 텍스트 값의 경우 그렇지 않습니다. 가장 중요한 것은 API 토큰은 취소할 수 있지만, 연락처가 secure_hash 값을 취소할 방법이 없다는 점입니다.)

같은 날 WPManageNinja는 감사를 표하며 이메일 레코드 ID를 해시와 결합하는 것을 고려하겠다고 말했습니다. 이는 이전(시간 기반 만료) 또는 이전(카운터 기반 만료) secure_hash 값의 자동 취소와 함께 구현된다면 문제를 해결할 것입니다. 이 기능은 아직 구현되지 않았지만, 정적 해시 값을 이 CVE의 일부로 간주하지 않습니다.

타임라인

  • 2023-03-11 WPManageNinja에 취약점을 보고했습니다. 이 시점에서 구독 취소 페이지에서만 취약점을 발견했습니다.
  • 2023-03-13 WPManageNinja가 보고서를 수신했음을 확인했습니다.
  • 2023-03-14 WPManageNinja 개발자들은 이메일 주소의 MD5 해시를 권한 부여에 사용한다는 것을 부인하고, wp_generate_uuid4 토큰을 사용한다고 주장했습니다.
  • 2023-03-14 그들이 MD5 이메일 주소 해시에 의존하고 있음을 설명하고 증명했습니다.
  • 2023-03-15 WPManageNinja의 초기 응답으로 인해 더 깊이 조사하여 환경 설정 관리 페이지에서 동일한 취약점을 발견했습니다. 발견 사항을 WPManageNinja에 보고하고 취약점이 더 심각해진 이유를 설명했습니다. 또한 Wordfence에 보고서를 제출하고 CVE를 요청했습니다.
  • 2023-03-16 WPManageNinja가 업데이트된 보고서를 수신했음을 확인했습니다.
  • 2023-03-16 Wordfence가 취약점을 확인하고 CVE-2023-1430을 할당했습니다.
  • 2023-04-10 WPManageNinja에 30일 알림을 보냈습니다.
  • 2023-04-14 WPManageNinja가 FluentCRM 2.8.0을 출시했지만 보안 패치에 대한 언급은 없었습니다("개선 및 버그 수정"만 언급).
  • 2023-04-22 WPManageNinja에 2.8.0 업데이트가 구독 취소 페이지의 취약점만 수정했으며 환경 설정 관리 페이지에는 여전히 존재한다고 알렸습니다.
  • 2023-04-24 WPManageNinja가 업데이트된 보고서를 수신했음을 확인했습니다.
  • 2023-05-14 WPManageNinja에 60일 알림을 보냈습니다.
  • 2023-05-15 WPManageNinja가 다음 주에 패치된 베타 버전을 보내겠다고 말했습니다(실제로 보내지 않음).
  • 2023-06-01 WPManageNinja에 공개 공개 전에 WP Fusion 개발자에게 미리 알려야 하는지 물었습니다. WPManageNinja는 다음 주에 업데이트를 출시할 것이므로 그럴 필요가 없다고 말했습니다(출시하지 않음).
  • 2023-06-08 WPManageNinja에 원래 공개일이 주말과 인접해 있어 공개를 2023-06-12로 연기하겠다고 알렸습니다.
  • 2023-06-09 WPManageNinja에 90일이 지났으며 다음 책임 있는 단계는 취약점에 대한 정보를 공개하여 모두가 기다리는 동안 완화 조치를 구현할 수 있도록 하는 것이라고 알렸습니다. 또한 WP Fusion 개발자에게 WPManageNinja가 취약점을 패치할 때까지 동기화 제한을 해결하지 말 것을 요청했습니다.
  • 2023-06-09 Wordfence가 취약점에 대한 초기 세부 정보를 공개했지만, 취약점이 패치되었다고 잘못 표시했습니다. 이는 저와 Wordfence 간의 의사소통 오류 때문이었습니다.
  • 2023-06-12 악용 세부 정보를 제외한 이 보고서를 게시했습니다.
  • 2023-06-12 WPManageNinja가 공개 공개 후 2시간 만에 취약점을 패치했지만(신고 후 93일), 변경 로그에는 취약점에 대한 언급이 없었습니다("구독 환경 설정 페이지에 MD5 대신 Secure Hash 사용"만 언급).
  • 2023-06-12 이 보고서에 패치 및 이전에 보류했던 세부 정보에 대한 정보를 업데이트했습니다.
  • 2023-06-12 WPManageNinja가 CVE에 대한 정보를 플러그인의 변경 로그에 추가했습니다.
  • 2024-01-17 WPManageNinja가 연락하여 영원한 해시 값 문제에 대한 해결책에 대한 제 의견을 물었습니다.
  • 2024-01-27 WPManageNinja가 FluentCRM 2.8.40을 출시하여 영원한 해시 값 문제를 해결하고 제가 제안한 개선 사항을 구현했습니다.
  • 2024-01-27 WPManageNinja가 FluentCRM 2.8.41을 출시하여 연결된 WordPress 사용자가 비밀번호를 변경할 때 연락처의 이전 인증 해시가 무효화되도록 했습니다.
  • 2024-01-27 영원한 해시 값과 관련된 사소한 문제가 해결되었다고 간주했습니다.

Nikka Systems Academy (Project Opal)는 영향을 받지 않습니다

2023년 1분기에 이전 뉴스레터 도구(Sendy)에서 FluentCRM으로 마이그레이션을 시작했습니다. FluentCRM을 Nikka Systems Academy (Project Opal)와 통합하는 과정에서 취약점을 발견했습니다. FluentCRM의 구독 관리 시스템을 자체 플러그인으로 대체했기 때문에 FluentCRM의 취약한 양식은 당사 사이트나 고객 데이터에 영향을 미치지 않았습니다.

WPManageNinja에 대한 권장 사항

FluentCRM은 훌륭한 플러그인이지만, WPManageNinja의 취약점 공개 처리에는 개선의 여지가 많습니다. 다음 목록은 WPManageNinja가 상황을 개선할 수 있는 방법에 대한 제 제안입니다.

  • 현재 코드베이스를 감사할 제3자 감사자를 고용해야 합니다. CVE-2023-1430 취약점은 해시를 사용하지 말아야 하는 전형적인 예입니다. WPManageNinja가 처음에 MD5 이메일 주소 해시를 권한 부여에 사용한다는 것을 부인한 점을 고려하면, 코드베이스에 대한 제3자 감사가 필요한 시점일 것입니다.
  • security.txt 파일(RFC 9116)을 게시하여 보안 연구자가 개발자에게 직접 연락할 수 있도록 해야 합니다. 고객 지원 부서를 통해 취약점을 보고해야 했고, 처음에 취약점 보고를 부적절하게 기각하여 중요한 완화 일수를 놓쳤습니다.
  • 취약점을 적시에 패치할 수 있는 더 나은 절차를 마련해야 합니다. 이와 같이 쉽게 패치할 수 있는 취약점은 30일 이내에 해결되어야 합니다. 90일 책임 공개 기간 내에 패치를 준비하지 못한 것은 용납될 수 없습니다.
  • 해결된 취약점과 구현된 보안 개선 사항을 항상 변경 로그에 공개하여 고객이 업데이트의 중요성을 알 수 있도록 해야 합니다.

그렇긴 하지만, 저는 여전히 WPManageNinja를 신뢰합니다. 모든 소프트웨어에는 버그가 있으며, 단 한 번의 부실한 취약점 보고 처리가 그들의 플러그인 사용을 중단할 이유는 아닙니다.

업데이트 2023-06-12: 그들이 여전히 변경 로그에서 취약점을 숨기려고 한 사실이 진심으로 걱정됩니다. (이제 CVE를 추가했습니다.)

변경 로그

  • 2023-06-12 최초 게시.
  • 2023-06-12 패치 가능 여부 및 이전에 보류했던 악용 세부 정보에 대한 정보로 업데이트.
  • 2023-06-12 타임라인에 추가: WPManageNinja가 CVE 정보를 플러그인의 변경 로그에 추가.
  • 2023-06-12 철자 오류 수정. CVSS가 Wordfence에 의해 6.5로 상향 조정.
  • 2024-01-27 FluentCRM 2.8.40 및 2.8.41이 영원한 해시 값과 관련된 사소한 문제를 해결한 방법에 대한 정보 추가.
도구 다운로드