id: aem-gql-servlet

info:
  name: AEM GQLServlet
  author: dhiyaneshDk,prettyboyaaditya
  severity: low
  description: AEM GQLServlet is exposed.
  reference:
    - https://helpx.adobe.com/experience-manager/6-3/sites/developing/using/reference-materials/javadoc/index.html?org/apache/jackrabbit/commons/query/GQL.html
  classification:
    cpe: cpe:2.3:a:adobe:experience_manager:*:*:*:*:*:*:*:*
  metadata:
    max-request: 29
    vendor: adobe
    product: experience_manager
    shodan-query: http.component:"Adobe Experience Manager"
  tags: aem,misconfig

http:
  - method: GET
    path:
      - "{{BaseURL}}{{paths}}"

    payloads:
      paths:
        - "/bin/wcm/search/gql.json?query=type:User%20limit:..1&pathPrefix=&p.ico"
        - "/bin/wcm/search/gql.servlet.json?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json/a.1.json?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json/a.4.2.1...json?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json;%0aa.css?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json;%0aa.html?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json;%0aa.js?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json;%0aa.png?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json;%0aa.ico?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json/a.css?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json/a.js?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json/a.ico?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json/a.png?query=type:base%20limit:..1&pathPrefix="
        - "/bin/wcm/search/gql.json/a.html?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.servlet.json?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json///a.1.json?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json///a.4.2.1...json?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json;%0aa.css?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json;%0aa.js?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json;%0aa.html?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json;%0aa.png?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json;%0aa.ico?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json///a.css?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json///a.ico?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json///a.png?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json///a.js?query=type:base%20limit:..1&pathPrefix="
        - "///bin///wcm///search///gql.json///a.html?query=type:base%20limit:..1&pathPrefix="
    stop-at-first-match: true

    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200

      - type: word
        words:
          - 'excerpt'
          - 'path'
          - 'hits'
        condition: and
# digest: 4b0a004830460221008004aef0ee783e33203afa9424cb2b63c5b70e301768feac14a339832ad08d38022100c941422b97189ef3e35972b761ed9b62ec05f58f4fd212e383fa782b7025f324:922c64590222798bb761d5b6d8e72950