Sinks

Vulnerability Type
Java Sinks
PHP Sinks
Node.js Sinks

Remote Code Execution (RCE)

Runtime.getRuntime().exec() ProcessBuilder.start() Method.invoke() ScriptEngine.eval() InitialContext.lookup() (JNDI Injection)

shell_exec() exec() system() passthru() proc_open() popen() eval() assert() create_function()

child_process.exec() child_process.execSync() child_process.spawn() vm.runInContext() vm.runInNewContext()

SQL Injection (SQLi)

Statement.executeQuery() Statement.executeUpdate() Statement.execute() EntityManager.createQuery()

mysqli_query() mysql_query() pg_query() PDO::query() (without prepared statements)

db.collection.find({ user: req.query.user }) (NoSQLi in MongoDB) sequelize.query() (raw queries)

Path Traversal / Arbitrary File Read/Write

File(String) FileReader(String) FileWriter(String) Files.readAllBytes(Path) ZipInputStream.getNextEntry()

file_get_contents() fopen() readfile() include() require() unlink()

fs.readFileSync() fs.readFile() fs.createReadStream() fs.writeFileSync() fs.unlinkSync()

Server-Side Request Forgery (SSRF)

HttpURLConnection.openConnection() URL.openStream() RestTemplate.getForObject() WebClient.get().uri()

file_get_contents("http://...") curl_exec() stream_context_create()

http.get() axios.get() fetch() request()

Cross-Site Scripting (XSS)

response.getWriter().write() HttpServletResponse.getOutputStream().print() JSP: <%= userInput %>

echo $_GET["input"]; print($_POST["input"]); printf($_GET["input"]); exit($_GET["input"]);

res.send(req.query.input) res.write(req.body.input) document.write(req.query.input) (in client-side JS)

Cross-Site Request Forgery (CSRF)

doPost(HttpServletRequest req, HttpServletResponse res) doPut(HttpServletRequest req, HttpServletResponse res) doDelete(HttpServletRequest req, HttpServletResponse res)

Forms with method="POST" and no CSRF token Session-modifying endpoints ($_SESSION, setcookie())

app.post('/update', (req, res) => {...} (without CSRF token verification)

XML External Entity (XXE) Injection

DocumentBuilder.parse() SAXParser.parse() XMLReader.parse() TransformerFactory.newInstance().newTransformer().transform()

simplexml_load_string() DOMDocument.loadXML() xml_parser_create()

xml2js.parseString() libxmljs.parseXml()

LDAP Injection

DirContext.search() LdapContext.search()

ldap_search() ldap_list() ldap_read()

ldapClient.search() (Node.js LDAP client)

Insecure Logging (Information Disclosure)

Logger.info() Logger.debug() System.out.println() PrintWriter.println()

error_log($_GET["input"]); var_dump($_POST["password"]); print_r($_SERVER);

console.log(req.body.password) winston.log('info', req.query.debug)

Insecure Cryptography

MessageDigest.getInstance("MD5") Cipher.getInstance("DES") Cipher.getInstance("ECB")

md5() sha1() crypt("plaintext", "salt") base64_encode()

crypto.createHash('md5') crypto.createCipher('des', key)

Insecure Session Management

HttpSession.getAttribute() request.getSession(true)

session_start(); setcookie("PHPSESSID", ...)

req.session.user = "admin" (without secure flags)

Last updated

Was this helpful?