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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-14871 — osTicket ajax.tickets.php의 BOLA/IDOR 취약점 | 책임 있는 공개 | Kitploit
도구/GitHubGitHub/jfoz1010/cve-2026-14871
Vulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPenetration TestingLearning & Education
GitHubjfoz1010/cve-2026-14871

CVE-2026-14871

osTicket ajax.tickets.php의 BOLA/IDOR 취약점 | 책임 있는 공개

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-14871 - osTicket ajax.tickets.php의 BOLA / IDOR

깨진 객체 수준 권한 부여(BOLA): 안전하지 않은 직접 객체 참조(IDOR)
include/ajax.tickets.php → viewField() 함수
보고자: @JF0x0r · 2026년 3월 27일 상태: 패치됨 - osTicket v1.17.8 / v1.18.4에서 수정본 출시


한눈에 보기

항목세부 정보
취약점BOLA / IDOR (깨진 객체 수준 권한 부여)
대상osTicket v1.18-git - 커밋 2570d69
구성 요소include/ajax.tickets.php
함수viewField() - 805–806행
엔드포인트GET /scp/ajax.php/tickets/{ticket_id}/field/{field_id}/view
CVSS 4.0 점수8.2 HIGH - AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N
CWECWE-862 (누락된 권한 부여), CWE-639 (사용자 제어 키를 통한 인증 우회)
상태✅ 패치됨 — osTicket v1.17.8 및 v1.18.4에서 수정됨

작성자 소개

저는 오픈소스 보안에 열정을 가진 보안 연구원 후안 펠리페 오즈(@JF0x0r)입니다. 저는 현상금을 위해 이 일을 하지 않습니다. 사람들이 의존하는 도구가 안전해야 한다고 믿기 때문에 하는 것입니다. 무언가를 발견하면 책임감 있게 신고하고, 제대로 문서화한 뒤, 수정이 이루어진 후에 공개적으로 공유합니다.


발견한 내용

osTicket의 AJAX 하위 시스템을 수동 코드 검토하던 중 ajax.tickets.php에서 이상한 점을 발견했습니다. viewField() 함수는 티켓 필드 데이터를 조회하는 요청을 처리하며, 티켓 객체를 검색하고 필드가 존재하는지 검증합니다. 그러나 요청한 상담원이 실제로 해당 티켓에 접근할 권한이 있는지는 절대 확인하지 않습니다.

checkStaffPerm() 호출도 없습니다. 부서 검증도 없습니다. 아무것도 없습니다.

즉, 인증된 상담원이라면 단일 부서로 엄격히 제한된 상담원이라 할지라도 ticket_id와 field_id만 알거나 추측하면 시스템의 다른 모든 부서의 티켓 필드를 읽을 수 있습니다. 이들은 순차적인 정수이므로 열거하기 쉽습니다.

이번 사례가 특히 명확한 이유는 같은 파일에서 바로 위에 있는 형제 함수 editField()와의 비교입니다. editField()는 $ticket->checkStaffPerm($thisstaff, Ticket::PERM_EDIT)를 올바르게 호출하고 위반 시 HTTP 403을 반환합니다. 쓰기 작업에는 이미 수정이 적용되어 있었지만, 읽기 작업에는 결코 적용되지 않았습니다.


개념 증명(PoC): 라이브 데모

통제된 실험실 환경에서 익스플로잇의 전체 과정을 처음부터 끝까지 녹화했습니다:

PoC Video — BOLA/IDOR osTicket

영상은 다음 단계를 보여줍니다:

  • 두 개의 격리된 부서(Dept-A 및 Dept-B)로 구성된 실험실 환경
  • Dept-A로만 접근이 제한된 인증 상담원 agent_a
  • Dept-B의 기밀 티켓을 대상으로 한 권한 없는 요청 구성
  • 제한된 티켓 필드 데이터가 노출된 상태로 서버가 HTTP 200 반환
  • 패치 후 재실행하여 HTTP 403 — 권한 거부 표시

이 저장소의 exploit.py 스크립트는 전체 체인(인증 → 열거 → 권한 없는 필드 접근)을 자동화하며, 평가 과정에서 이 문제가 수동 테스트를 넘어 확장됨을 확인하는 데 사용되었습니다.


영향

  • 민감한 데이터 노출 - 모든 상담원이 모든 부서의 기밀 티켓 필드를 읽을 수 있음
  • 수평적 권한 상승 - 부서 경계가 완전히 우회됨
  • 대량 열거 - 순차적인 ticket_id / field_id 정수로 인해 대량 스크래핑이 쉬움
  • 다중 테넌트 기밀성 침해 - osTicket의 부서 격리 모델이라는 핵심 설계 원칙을 무력화함

수정 사항

viewField()에서 티켓 객체가 검색된 직후 한 줄을 삽입하는 것으로, editField()가 이미 올바르게 수행하는 것과 정확히 동일합니다. 전체 기술적 세부 사항, diff 및 CVSS 분석은 첨부된 보고서에 있습니다.

📄 BOLA_IDOR_osTicket_Report_v2.pdf

✅ 공식 패치(osTicket 팀 확인)

osTicket은 보고서를 확인했고, 요청된 필드를 처리/렌더링하기 전에 $ticket->checkStaffPerm($thisstaff)를 추가하여 완화 조치를 구현했습니다. 이는 editField()에 이미 존재하는 검사와 동일합니다. 이제 직원은 필드 데이터를 보기 전에 상위 티켓에 대한 접근 권한이 있어야 합니다.

osTicket은 전체 익스플로잇 절차를 공개적으로 공유하기 전에 짧은 업그레이드 유예 기간을 권장합니다. 이 저장소는 해당 지침을 따릅니다. 아래의 공개 타임라인을 참조하세요.


공개 타임라인


이 저장소의 파일

root@kitploit:~
.
├── README.md                        # This file
├── BOLA_IDOR_osTicket_Report_v2.pdf # Full technical disclosure report
├── exploit.py                       # PoC automation script
└── PoC_osTicket.mov                 # Local copy of the demo video

책임 있는 공개

저는 어떤 것도 공개하기 전에 osTicket 보안 팀에 이 내용을 비공개로 보고했습니다. 이 저장소는 책임 있는 공개 기간이 지난 후에만 공개되었으며, 이제 공식 패치가 배포되었으므로 전체 문서를 공개합니다. osTicket 유지관리자이시고 궁금한 점이 있으시면 GitHub를 통해 직접 연락 주시기 바랍니다.


발견자: @JF0x0r · 오픈소스 보안은 중요합니다.

도구 다운로드
세부 정보참조
패치 커밋d590a9770d25159fb7741681f36e23a35f1fb5e9
수정 버전v1.17.8 · v1.18.4
공식 다운로드osticket.com/download
릴리스 유형신속 보안 릴리스
공로 표기Juan Felipe Oz (@JF0x0r)
날짜내용
2026년 3월 27일취약점 발견 및 문서화
2026년 3월 27일[email protected]으로 보고서 전송
2026년 6월 17일osTicket이 문제를 확인하고 검증용 완화 패치 공유
2026년 6월 17일osTicket이 수정 사항이 포함된 v1.17.8 및 v1.18.4 릴리스(커밋 d590a9770d25159fb7741681f36e23a35f1fb5e9)
—GitHub CNA를 통한 CVE 지정 대기 중