logo

Database

Typescript Unrestricted File Upload

Description

Detects unrestricted file upload vulnerabilities in Express.js applications where file uploads are not properly validated. This can allow attackers to upload malicious files like web shells or overwrite critical system files, potentially leading to remote code execution or system compromise.

Weakness:

027 - Insecure file upload

Category: Access Subversion

Detection Strategy

    Identifies Express.js file upload handler functions and middleware configurations

    Checks if the file upload code lacks proper file type validation or restrictions

    Verifies if upload destination paths are properly sanitized and restricted

    Reports a vulnerability when file uploads are accepted without proper extension checks or type validations

    Flags cases where uploaded files can be saved to arbitrary locations without path validation

Vulnerable code example

const express = require('express');
const fs = require('fs');
const app = express();

app.post('/write', express.json(), (req, res) => {
  const userFile = req.body.filename; // User-controlled input - dangerous!
  fs.writeFileSync('/var/www/html/' + userFile, req.body.content);
  res.send('File written');...

✅ Secure code example

const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();

app.post('/write', express.json(), (req, res) => {
  const userFile = req.body.filename;
  ...