🇰🇷 한글 설명
HAPI FHIR는 Java 기반 의료 상호운용성 표준인 HL7 FHIR의 완전한 구현체입니다. 6.9.7 이전 버전의 FHIRPathEngine은 matches(), matchesFull(), replaceMatches() 함수에 전달되는 사용자 제어 정규식에 효과적인 타임아웃을 적용하지 않아, 정규식 파괴적 백트래킹(catastrophic backtracking)으로 인한 서비스 거부(DoS)가 발생할 수 있습니다. 이 문제는 6.9.7 버전에서 수정되었습니다.
💡 쉬운 설명
악의적인 사용자가 아주 복잡한 검색 패턴을 입력하면 서버가 그 계산에 과도하게 매달려 응답을 멈출 수 있습니다. 이 취약점은 의료 데이터 시스템이 정상적으로 동작하지 못하게 만들 수 있습니다.
🇺🇸 원문 (English)
HAPI FHIR is a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java. Prior to 6.9.7, the FHIRPathEngine implementation passes user-controlled regular expressions from matches(), matchesFull(), and replaceMatches() to Java regex operations without effective timeouts, allowing catastrophic backtracking and denial of service. This issue is fixed in version 6.9.7.
📍 영향받는 시스템
HAPI FHIR Java 라이브러리 6.9.7 미만 버전을 사용하는 의료 데이터 교환 시스템
⚔️ 공격 벡터
FHIRPath 표현식의 matches/matchesFull/replaceMatches 함수에 악의적인 정규식을 포함한 요청을 전송하여 서버 CPU를 고갈시킴
🛡️ 대응 방법
HAPI FHIR를 6.9.7 이상 버전으로 업그레이드하고, 사용자 입력 정규식에 대한 길이 제한 및 실행 시간 제한을 추가
🔧 검증 코드
출력된 버전이 6.9.7 미만이면 취약하며, 6.9.7 이상이거나 출력이 없으면 해당 경로에 HAPI FHIR가 없는 것이므로 Maven/Gradle 의존성 설정도 함께 확인해야 합니다.
find / -name 'hapi-fhir-*.jar' 2>/dev/null | xargs -I{} basename {} | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | head -1