live · scanning repos
Scanrepo
github.com
github.com / evolution-foundation

evolution-foundation/evolution-api

TypeScript·364 files·commit fa09d37·scanned 4d ago·cached ✓
25/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.

score capped at 25 — 9,943 stars — findings likely legitimate code patterns

verdict accurate?
threat-state: lowlive

FINDINGS ░▒▓

criticalchild_process / exec usageExecuting shell commands can be used to download and run malware, exfiltrate data, or modify system files.src/api/provider/sessions.ts
import axios from 'axios';
import { execFileSync } from 'child_process';

type ResponseSuccess = { status: number; data?: any };
+8
criticalRemote script piped into a shellA shell script downloads remote content and executes it directly (e.g. `curl … | bash`). The payload is never stored or reviewable and can change server-side — a classic malware/backdoor install pattern.local_install.sh
    Linux*)     
        if [ ! -x "$(command -v curl)" ]; then
            log_warning "Curl não está instalado. Tentando instalar..."
            if [ -x "$(command -v apt-get)" ]; then
+10
infoSuspicious files are not reachable from entry pointsFlagged files exist but are not imported by any entry point. They may be dead code, tests, or attack payloads triggered by another mechanism.+2
infoBase64 encoding usedatob() or Buffer.from with base64. Common in legitimate code but also used to hide malicious URLs.src/api/integrations/channel/meta/whatsapp.business.service.ts
          const response = await axios.get(mediaMessage.media, { responseType: 'arraybuffer' });
          const buffer = Buffer.from(response.data, 'base64');
          formData.append('file', buffer...
+2
infoBase64 encoding usedatob() or Buffer.from with base64. Common in legitimate code but also used to hide malicious URLs.src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts
        if (typeof messageSecretBase64 === 'string') {
          const messageSecret = Buffer.from(messageSecretBase64, 'base64');

          const msg = {
+2
infoBase64 encoding usedatob() or Buffer.from with base64. Common in legitimate code but also used to hide malicious URLs.src/api/integrations/chatbot/openai/services/openai.service.ts
    } else if (msg.message.base64) {
      audio = Buffer.from(msg.message.base64, 'base64');
    } else {
      // Fallback for raw WhatsApp audio messages that need downloadMediaMessage
+2
infoSuspicious file in repoVery large source file (576KB) — could contain obfuscated payloadpackage-lock.json+2
warningUnvalidated file uploadFile upload without type/size validation. Can be exploited for remote code execution or storage abuse.package.json
    "minio": "^8.0.3",
    "multer": "^2.0.2",
    "nats": "^2.29.1",
    "node-cache": "^5.1.2",
+3
warningUnvalidated file uploadFile upload without type/size validation. Can be exploited for remote code execution or storage abuse.src/api/routes/sendMessage.router.ts
import { RequestHandler, Router } from 'express';
import multer from 'multer';

import { HttpStatus } from './index.router';
+3

Scores are heuristics. A “safe” verdict means no known-malicious patterns were found — clever malware can look boring. Wrong verdict? Flag it above; confirmed false positives become regression tests.

207 files scanned @ fa09d37 | 10/25/2026 | heuristic scan — always review manually

risk by category
code execution20
network & exfiltration6
file system access0
obfuscation0
supply chain2
owasp / injection6
telemetry
files 207/364rules hit 9engine v7commit fa09d37

github

evolution-foundation/evolution-api

Evolution API is an open-source WhatsApp integration API

TypeScript
9943
7372
1238d
364 files
207 scanned(57%)
fa09d37

architecture░▒▓

entry (1) flagged (2) pkg (165)
356 nodes · 873 edgesscroll to zoom · click node to jump to finding
LOW (25/100) — evolution-foundation/evolution-api — ScanRepo