github.com / wavetermdev
wavetermdev/ waveterm
Go·1085 files·commit 9f1c967·scanned 5d ago·cached ✓
15/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.
score capped at 15 — 22,574+ stars — findings likely false positives
verdict accurate?
22,574 stars
Partial architecture graph
threat-state: lowlive
FINDINGS ░▒▓
criticalGo os/exec usageos/exec is used to run external commands. In malware it drops payloads, modifies the system, or opens shells.pkg/blockcontroller/tsunamicontroller.go
func runTsunamiAppBinary(ctx context.Context, appBinPath string, appPath string, blockMeta waveobj.MetaMapType) (*TsunamiAppProc, error) {
cmd := exec.Command(appBinPath)
cmd.Env = append(os.Environ...+8criticalGo os/exec usageos/exec is used to run external commands. In malware it drops payloads, modifies the system, or opens shells.pkg/buildercontroller/buildercontroller.go
cmd := exec.Command(appBinPath)
cmd.Env = append(os.Environ(), "TSUNAMI_CLOSEONSTDIN=1")
+8warningGo unsafe package usageunsafe package bypasses Go's type safety. Malware uses it for memory tricks, pointer casts, and hiding behavior.pkg/util/procinfo/procinfo_darwin.go
"syscall" "unsafe" "github.com/ebitengine/purego"+3
warningGo unsafe package usageunsafe package bypasses Go's type safety. Malware uses it for memory tricks, pointer casts, and hiding behavior.pkg/util/procinfo/procinfo_windows.go
"syscall" "unsafe" "golang.org/x/sys/windows"+3
criticalGo os/exec usageos/exec is used to run external commands. In malware it drops payloads, modifies the system, or opens shells.pkg/util/shellutil/shellutil.go
userStr := "/Users/" + osUser.Username
out, err := exec.CommandContext(ctx, "dscl", ".", "-read", userStr, "UserShell").CombinedOutput()
if err != nil {
return DefaultShellPath+8criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.tsunami/frontend/src/vdom.tsx
try {
const fn = eval(fnDecl.jscode);
if (typeof fn === "function") retVal = fn(...args);
} catch (err) {+8warningSSH/credential path accessAccessing .ssh, .aws/credentials, or .env files to steal authentication credentials.pkg/remote/conncontroller/conncontroller.go
home := wavebase.GetHomeDir()
localConfig := filepath.Join(home, ".ssh", "config")
systemConfig := filepath.Join("/etc", "ssh", "config")
sshConfigFiles := []string{localConfig, systemConfig}+5warningClipboard read accessnavigator.clipboard.readText() reads the user's clipboard. In a wallet/crypto context this is often used to steal copied seed phrases or private keys.frontend/app/app.tsx
try {
const clipboardText = await navigator.clipboard.readText();
if (clipboardText == null) {
return null;+4warningSSH/credential path accessAccessing .ssh, .aws/credentials, or .env files to steal authentication credentials.pkg/aiusechat/tools_readfile.go
}{
{filepath.Join(homeDir, ".gnupg") + string(filepath.Separator), "GPG directory"},
{filepath.Join(homeDir, ".password-store") + string(filepath.Separator), "password store directory"},
{"/etc...+5infoSuspicious file in repoVery large source file (1410KB) — could contain obfuscated payloadpackage-lock.json+2
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.
752 files scanned @ 9f1c967 | 10/23/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration0
file system access14
obfuscation0
supply chain4
owasp / injection0
telemetry
files 752/1085rules hit 12engine v7commit 9f1c967
github
wavetermdev/waveterm
An open-source, AI-integrated, cross-platform terminal for seamless workflows
22574
1172
1603d
1085 files
752 scanned(69%)
9f1c967
architecture░▒▓
entry (3) flagged (17) pkg (381)
781 nodes · 2200 edgesscroll to zoom · click node to jump to finding