🇰🇷 한글 설명
OpenEMR 8.5.0 이전 버전의 Syndromic Surveillance 모듈에는 인증된 SQL 인젝션 취약점이 존재합니다. Clinician 권한을 가진 사용자가 syndromicsurveillance/index 엔드포인트의 form_icd_codes[] 매개변수를 조작하여 데이터베이스 내용을 읽고 수정할 수 있으며, 이를 통해 관리자 계정을 탈취할 수 있습니다.
💡 쉬운 설명
의료 기록 시스템인 OpenEMR의 특정 기능에 입력값 검사가 부족하여, 일반 진료 권한을 가진 사용자가 데이터베이스 내부 정보를 훔치거나 변경할 수 있습니다. 이 과정에서 관리자 비밀번호까지 빼앗겨 시스템 전체가 장악될 수 있습니다.
🇺🇸 원문 (English)
OpenEMR before 8.5.0 contains an authenticated SQL injection vulnerability in the Syndromic Surveillance module that allows users with Clinician-level privileges to read and modify arbitrary database contents by submitting crafted values in the form_icd_codes[] POST parameter to the syndromicsurveillance/index endpoint. Attackers can inject an unquoted numeric IN() clause and UNION DISTINCT SELECT statement using hex-encoded literals to abuse MySQL extractvalue() for error-based exfiltration of bcrypt password hashes and execute stacked queries that reset passwords, resulting in full administrative account takeover.
📍 영향받는 시스템
OpenEMR 8.5.0 이전 버전 (Syndromic Surveillance 모듈 사용 환경)
⚔️ 공격 벡터
Clinician 권한으로 로그인한 뒤 form_icd_codes[] 파라미터에 악성 SQL 구문을 삽입하여 DB 정보 유출 및 비밀번호 초기화 실행
🛡️ 대응 방법
OpenEMR 8.5.0 이상으로 업데이트하고, 해당 모듈을 사용하지 않는 경우 비활성화하며, 관리자 및 사용자 비밀번호를 변경하고 접근 로그를 점검
🔧 검증 코드
출력된 major, minor, patch 값이 8.5.0 미만이면 취약한 버전이므로 업데이트가 필요하며, 8.5.0 이상이면 패치가 적용된 것입니다.
php -r 'echo "Check OpenEMR version in version.php or Admin > Config";' 2>/dev/null; grep -rE "\$v_(major|minor|patch)" /var/www/html/openemr/version.php 2>/dev/null