All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.joern.scanners.java.CrossSiteScripting.scala Maven / Gradle / Ivy

package io.joern.scanners.java

import io.joern.scanners._
import io.shiftleft.semanticcpg.language._
import io.joern.console._
import io.joern.macros.QueryMacros._
import io.joern.dataflowengineoss.language._
import io.joern.dataflowengineoss.queryengine.EngineContext

object CrossSiteScripting extends QueryBundle {

  implicit val resolver: ICallResolver = NoResolve

  @q
  def xssServlet()(implicit context: EngineContext): Query =
    Query.make(
      name = "xss-servlet",
      author = Crew.malte,
      title = "Reflected Cross-Site Scripting: Servlet Returns HTTP Input in Response",
      description = """
        |A servlet returns a URL parameter as part of the response.
        |
        |Unless the parameter is escaped or validated in-between, this is a reflected XSS vulnerability.
        |""".stripMargin,
      score = 8,
      withStrRep({ cpg =>
        def source =
          cpg.call.methodFullNameExact(
            "javax.servlet.http.HttpServletRequest.getParameter:java.lang.String(java.lang.String)"
          )

        def responseWriter =
          cpg.call.methodFullNameExact("javax.servlet.http.HttpServletResponse.getWriter:java.io.PrintWriter()")

        def sinks =
          cpg.call
            .methodFullNameExact("java.io.PrintWriter.println:void(java.lang.String)")
            .where(_.argument(0).reachableBy(responseWriter))

        sinks.where(_.argument(1).reachableBy(source))
      }),
      tags = List(QueryTags.xss, QueryTags.default)
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy