Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
pfsense-api-enroll-autoadd — pfSense Plus MIM API toolkit b4acd7ca - 높음 - 원격 - 권한 잔존 - Paramiko AutoAddPolicy enroll | Kitploit
도구/GitHubGitHub/abraxas/pfsense-api-enroll-autoadd
Vulnerability AnalysisExploitationNetwork SecurityCryptographyPenetration TestingAuthenticationPapers & ResearchRed TeamingLabs & Practice
GitHubabraxas/pfsense-api-enroll-autoadd

pfsense-api-enroll-autoadd

pfSense Plus MIM API toolkit b4acd7ca - 높음 - 원격 - 권한 잔존 - Paramiko AutoAddPolicy enroll

저장소 보기
1일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - pfsense-api-enroll-autoadd

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  pfsense-api-enroll-autoadd

pfsense-api-enroll-autoadd

분류: 권한 잔존 도달 범위: 원격

pfSense Plus MIM API (Netgate/pfsense-api) b4acd7ca - Netgate

example-add-devices.py는 Nexus 컨트롤러를 각 pfSense 장치에 등록하는 문서화된 방법입니다. 이 스크립트는 load_system_host_keys()를 절대 호출하지 않습니다. paramiko.AutoAddPolicy()를 설정한 다음 connect하고 exec_command(device_script)를 실행합니다. 주석에는 장치가 이미 known_hosts에 있을 때 AutoAdd를 제거하라고 되어 있습니다. 기본 배포 설정은 AutoAdd입니다.

새 장치에 대한 최초 접속 SSH는 응답하는 호스트 키를 그대로 수용합니다. 비밀번호 또는 키 인증이 해당 피어에 제시됩니다. stdout은 json.loads 처리되어 실제 컨트롤러로 POST /mim/devices됩니다.

이것은 서드파티 CE REST 패키지가 아닙니다. 이것은 pfSense Plus Nexus Multi-instance Management를 위한 공식 OpenAPI와 생성된 Python 클라이언트입니다. 서버는 Plus 전용입니다. 실습 환경은 Paramiko SSH 가젯입니다. 실제 Plus 컨트롤러와 통신하지는 않았습니다.

ID아직 CVE 없음
분류권한 잔존 (등록 SSH에서의 Paramiko AutoAddPolicy)
도달 범위원격 (최초 접속 시 장치 SSH에 대한 경로 상)
CWECWE-322
CVSS높음: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
제품Netgate/pfsense-api (Plus Nexus MIM 클라이언트 툴킷)
영향받음main b4acd7ca21dbca739a530403a1f62a7440f7726f example-add-devices.py
인증운영자가 공식 샘플을 실행하며, 공격자는 장치 SSH에 대한 경로 상에 위치
라이선스GNU Affero GPL v3.0
실습 환경127.0.0.1:19111 전용. Plus 이미지 없음.

AC:H는 최초 접속 / 경로 상을 의미합니다. 실제 장치 키가 이미 known_hosts에 있고 또한 AutoAdd 줄이 제거된 워크스테이션은 이 잔존 문제에 해당하지 않습니다.

동일한 핀 잔존 문제: 등록 셸에 대한 ControllerSummary의 JSON 보간 (G1) 및 샘플이 verify_ssl=False를 강제 (G9). 시리즈 허브: pfsense-api-nexus-mim.

공격자가 할 수 있는 일

운영자가 샘플을 실행하는 동안 pfsense_addresses에 있는 최초 접속 SSH 주소에 대한 경로 상에 위치합니다. AutoAdd는 여전히 켜져 있습니다.

방식싱크권한
pfsense_addresses의 최초 접촉 SSH 주소로 on-path에 앉기set_missing_host_key_policy(paramiko.AutoAddPolicy()) 후 connect (example-add-devices.py:151-160)무결성 (실험실 입증): 알 수 없는 호스트 키가 수용됨. 실험실: AutoAddPolicy 연결됨(autoadd=yes). RejectPolicy 실패(reject-control=yes).
동일 세션, exec_command(device_script) 응답stdout이 DeviceIdentity로 파싱됨 (example-add-devices.py:161-187)무결성 (실험실 입증): exec가 PFSENSE-API-ENROLL-AUTOADD-WITNESS를 포함한 identity JSON을 반환함(identity-json=yes).
동일 MITM, exec 페이로드 읽기device_script는 G1의 ControllerSummary curl -d 잔여물정찰 (소스에서 추론): 컨트롤러 identity 키, Netgard vpn_pubkey / vpn_netkey / listen 주소. 이 실험실에서는 덤프되지 않음.
동일 MITM, 비밀번호 또는 키 인증SSHUSER / SSHPASS 또는 agent/keys (example-add-devices.py:156-160)정찰 (추론): 가짜 호스트에 제시된 자격 증명 또는 키. 실험실에서는 샘플 SSHPASS 경로로만 비밀번호 인증을 사용함.
동일 stdout JSON, add_controlled_device.sync실제 컨트롤러의 POST /mim/devices무결성 (추론): 공격자의 Noise/VPN 키와 address를 등록함. 또한 이 실험실에서는 핸드셰이크가 실행되지 않음.
MITM이 SSH 서버인 경우클라이언트가 보낸 exec 그대로, SSHUSER로서무결성 / 가용성 (추론): 등록 스크립트를 실행, 중단 또는 건너뜀. 실제 장치의 Unix-socket 호출은 MITM이 이를 전달할 때만 발생함.

실험실 입증 vs 추론: AutoAdd 연결, RejectPolicy 실패, witness가 포함된 identity JSON은 실험실 결과임. 컨트롤러 키 덤프, 자격 증명 탈취, 가짜 장치의 POST /mim/devices, 실제 unix-socket curl 실행은 동일한 샘플 경로에서 추론한 것임.

요구 사항: 운영자가 호스트 키가 아직 고정되지 않은 SSH 주소에 대해 공식 샘플을 실행하고, AutoAdd가 켜져 있어야 함. 해당 SSH로의 네트워크 경로. AC:H는 최초 접촉 / on-path임.

닫힌 채로 유지되는 인접 표면

표면이유
동일한 알 수 없는 호스트에 대한 RejectPolicy실험실: reject-control=yes. Paramiko가 키를 거부함.
known_hosts에 실제 장치 키가 있고 또한 AutoAdd 줄이 제거된 워크스테이션주석의 의도된 모드. 호출을 추가하지 않는 한 샘플은 해당 키를 로드하지 않음.
HTTPS 컨트롤러 로그인verify_ssl=False는 형제 샘플 잔여물(G9)이며, 이 싱크가 아님.
실제 방화벽의 Unix-socket MIMMITM이 exec를 전달하는 경우에만 해당. 이 실험실은 /var/run/pfnet-controller.sock과 통신하지 않음.
생성된 Client의 기본 verify_ssl=True라이브러리 기본값은 잔여물이 아님. 샘플은 False로 강제함.
Plus RBAC / 라이브 :8443이 실험실은 Paramiko 가젯임. Plus 컨트롤러와 통신하지 않았음.
인증되지 않은 인터넷에서 8443으로로그인은 여전히 JWT를 발급함. 이 발견 사항이 아님.
Diagnostics PHP/shell플릿 JWT에 대한 의도된 관리자 권한. 이 발견 사항이 아님.

발견 방법

CE WebGUI 잔여물 이후 github.com/Netgate/pfsense-api main b4acd7ca21dbca739a530403a1f62a7440f7726f를 고정했음. 이 트리는 OpenAPI와 Plus Nexus MIM용 생성 Python임. example-add-devices.py의 등록 루프를 읽었음. 호스트 키 정책은 AutoAdd임. 시크릿은 동일한 exec 채널에 있음. 샘플은 load_system_host_keys()를 호출하지 않음.

이미 기록된 잘못된 방향: AutoAdd를 의도된 실험실 전용으로 취급(주석은 opt-out이지 opt-in이 아님); known_hosts가 로드된다고 가정; 이를 ControllerSummary shell 보간 잔여물에 포함; Plus를 라이브 실험실에서 테스트; 이것이 :8443에 대한 인증되지 않은 HTTPS라고 주장.

Theatre: 리버스 셸. 오라클은 RejectPolicy fail과 AutoAdd connect, 그리고 witness가 포함된 identity JSON이다.

Lab

python3 pfsense-api-enroll-autoadd-Abraxas-Labs.py

또는

cd lab
./run.sh

Loopback SSH 127.0.0.1:19111. Compose 프로젝트 pfsense-api-enroll-autoadd. CONTROL: RejectPolicy는 알 수 없는 호스트를 거부한다. INJECT: 공식 샘플 AutoAddPolicy, connect, 등록 스크립트의 exec_command; stdout은 witness가 포함된 identity JSON이다. 라이브 Plus 컨트롤러는 없다. Witness PFSENSE-API-ENROLL-AUTOADD-WITNESS. 실행 후 스택은 해체된다.

SUCCESS PFSENSE-API-ENROLL-AUTOADD autoadd=yes reject-control=yes identity-json=yes PFSENSE-API-ENROLL-AUTOADD-WITNESS

수정 방법

paramiko.RejectPolicy()를 사용하거나 known_hosts를 고정하세요. connect 전에 load_system_host_keys()(그리고 전용 known_hosts 파일)를 호출하세요. 공식 샘플에 AutoAddPolicy()를 포함하지 마세요. "모든 pfsense 장치가 known_hosts에 있다면 이 줄을 주석 처리하세요"라는 주석이 의도된 모드입니다. 이를 기본값으로 만드세요.

참고 자료

  • github.com/Netgate/pfsense-api b4acd7ca21dbca739a530403a1f62a7440f7726f
  • example-add-devices.py
  • 시리즈 허브: pfsense-api-nexus-mim
  • 동일 핀: pfsense-api-enroll-json-ssh (G1) · pfsense-api-example-ssl-verify (G9)
  • CWE-322

라이선스

GNU Affero GPL v3.0. LICENSE를 참조하세요. 루프백 랩 전용. 보증 없음.

도구 다운로드