diff --git a/vulnerable.js b/vulnerable.js new file mode 100644 index 0000000..03b0a9e --- /dev/null +++ b/vulnerable.js @@ -0,0 +1,59 @@ +const express = require('express'); +const fs = require('fs'); +const vm = require('vm'); +const jwt = require('jsonwebtoken'); + +const app = express(); +app.use(express.urlencoded({ extended: true })); +app.use(express.json()); + +// Insecure Deserialization +app.post('/deserialize', (req, res) => { + const serializedData = req.body.data; + try { + const deserializedData = JSON.parse(serializedData); + res.send(`Deserialized data: ${deserializedData}`); + } catch (e) { + res.status(400).send('Invalid data'); + } +}); + +// Cross-Site Scripting (XSS) +app.get('/greet', (req, res) => { + const name = req.query.name; + res.send(`

Hello, ${name}

`); +}); + +// Insecure JWT Handling +app.post('/login', (req, res) => { + const user = { id: 1, username: req.body.username }; + const token = jwt.sign(user, 'secretkey'); // Weak secret + res.json({ token }); +}); + +// Unsafe File Operations +app.get('/read-file', (req, res) => { + const filename = req.query.filename; + fs.readFile(`/var/data/${filename}`, 'utf8', (err, data) => { + if (err) { + res.status(500).send('File read error'); + return; + } + res.send(`File content: ${data}`); + }); +}); + +// Server-Side JavaScript Injection +app.post('/execute', (req, res) => { + const code = req.body.code; + try { + const result = vm.runInNewContext(code, {}); + res.send(`Execution result: ${result}`); + } catch (e) { + res.status(500).send('Execution error'); + } +}); + +app.listen(3000, () => { + console.log('Server running on port 3000'); +});