Fileupload Gunner - Project Hot
Two recent vulnerability classes illustrate the persistent heat:
In each case, the root cause was trusting client-supplied file metadata.
The most popular “hot” implementation right now is GunnerPro, a CLI tool that:
Sample run:
gunnerpro -u https://target.com/upload -p "file" -t 50
Result:
[CRITICAL] Uploaded shell.php.phtml - accessible at /uploads/shell.php.phtml
[!] Bypass used: Invalid extension .phtml accepted due to missing .php blacklist.
New “hot” scripts integrate LLMs to mutate payloads in real-time. For example:
// routes/upload.js - The "Gunner" endpoint const AWS = require('aws-sdk'); const v4: uuidv4 = require('uuid');const s3 = new AWS.S3( region: 'us-east-1', signatureVersion: 'v4' );
app.post('/api/gunner/request-upload', async (req, res) => const filename, filetype, projectId = req.body;
// Authentication & Authorization for Gunner project if (!req.user.hasAccessTo(projectId)) return res.status(403).json( error: "Not authorized for this hot zone" ); fileupload gunner project hot
const key =
gunner-hot-uploads/$projectId/$uuidv4()-$filename;const params = Bucket: process.env.HOT_BUCKET, Key: key, Expires: 3600, // URL valid for 1 hour ContentType: filetype, // Optional: Server-side encryption for "hot" sensitive data ServerSideEncryption: 'AES256' ;
const uploadUrl = await s3.getSignedUrlPromise('putObject', params);
res.json( uploadUrl, key, fileId: uuidv4() ); );In each case, the root cause was trusting
Do not route the file through your application server (EC2, Kubernetes pod, etc.). That server is a bottleneck.
Three reasons:
