{"id":2303,"name":"أوامر","author":"NTKhang","framework":"goat","overall":65,"grade":"C","level":"risky","verdict":"Risky — serious capabilities found, review before installing","scores":{"security":50,"privacy":79,"quality":100,"maintenance":82,"community":0},"counts":{"critical":0,"high":1,"medium":2,"low":4},"alerts":[{"id":"shell","severity":"high","category":"security","title":"Shell access","description":"Spawns operating-system processes through child_process. A command running shell code can read or change anything the bot's account can.","count":2,"locations":[{"line":2,"snippet":"const { execSync } = require(\"child_process\");"},{"line":354,"snippet":"execSync(`npm install ${packageName} --save`, { stdio: \"pipe\" });"}]},{"id":"runtime-install","severity":"medium","category":"security","title":"Installs packages at runtime","description":"Runs npm/yarn/pip install while the bot is running. Whatever gets installed is not reviewed here.","count":1,"locations":[{"line":354,"snippet":"execSync(`npm install ${packageName} --save`, { stdio: \"pipe\" });"}]},{"id":"paste-host","severity":"medium","category":"privacy","title":"Fetches from a paste site or link shortener","description":"Content behind a paste/shortener link can be swapped out by its owner at any time.","count":1,"locations":[{"line":216,"snippet":"url = url.replace(regex, \"https://pastebin.com/raw/$1\");"}]},{"id":"dynamic-require","severity":"low","category":"security","title":"Dynamic require","description":"require() is called with a value computed at runtime, so the loaded module cannot be known from reading the file.","count":4,"locations":[{"line":303,"snippet":"const regExpCheckPackage = /require(\\s+|)\\((\\s+|)[`'\"]([^`'\"]+)[`'\"](\\s+|)\\)/g;"},{"line":368,"snippet":"const oldCommand = require(pathCommand);"},{"line":390,"snippet":"const command = require(pathCommand);"},{"line":519,"snippet":"const command = require(pathCommand);"}]},{"id":"env","severity":"low","category":"privacy","title":"Environment variable access","description":"Reads process.env. Fine on its own; worth a look if the values are sent anywhere.","count":2,"locations":[{"line":153,"snippet":"(process.env.NODE_ENV == \"development\" ? true : !file.match(/(dev)\\.js$/g)) &&"},{"line":319,"snippet":"if (process.env.NODE_ENV == \"development\") {"}]},{"id":"fs-access","severity":"low","category":"security","title":"Filesystem access","description":"Reads or writes files on the machine running the bot.","count":1,"locations":[{"line":3,"snippet":"const fs = require(\"fs-extra\");"}]},{"id":"network","severity":"low","category":"privacy","title":"Network access","description":"Makes HTTP/WebSocket requests. Check where the data goes.","count":1,"locations":[{"line":1,"snippet":"const axios = require(\"axios\");"}]}],"capabilities":[{"id":"network","label":"Network","active":true},{"id":"filesystem","label":"Filesystem","active":true},{"id":"shell","label":"Shell","active":true},{"id":"env","label":"Env vars","active":true},{"id":"eval","label":"Dynamic code","active":false},{"id":"credentials","label":"Session data","active":false},{"id":"install","label":"Installs packages","active":true},{"id":"process","label":"Process control","active":false}],"checks":[{"label":"Exports a command/module","ok":true},{"label":"Handles errors (try/catch or .catch)","ok":true},{"label":"Readable, not minified","ok":true},{"label":"Has explanatory comments","ok":true},{"label":"No deprecated dependencies","ok":true},{"label":"Reasonable size (< 200 KB)","ok":true}],"dependencies":{"builtin":["child_process","path"],"external":["axios","cheerio","fs-extra"],"local":[]},"domains":["pastebin.com","raw.githubusercontent.com"],"scannedAt":"2026-11-05T14:07:28.750Z"}