live · scanning repos
Scanrepo
github.com
github.com / microsoft

microsoft/tgrep

Rust·110 files·commit 69e4fd0·scanned 2h ago·cached ✓
15/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.

score capped at 15 — microsoft is a verified organization — findings likely false positives

verdict accurate?
Verified organization
Crypto/Web3 project
threat-state: lowlive

FINDINGS ░▒▓

warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.tgrep-cli/src/mem.rs

    unsafe {
        let handle = GetCurrentProcess();
        let mut counters = MaybeUninit::<PROCESS_MEMORY_COUNTERS>::zeroed();
+3
warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.tgrep-cli/src/search.rs
            // accepts when it maps a file it is searching.
            Self::Mapped(map) => unsafe { std::str::from_utf8_unchecked(map) },
        }
    }
+3
warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.tgrep-cli/src/serve/index_cleanup.rs
    // this never falls back to POSIX semantics when a mapped file rejects it.
    let result = unsafe {
        SetFileInformationByHandle(
            file.as_raw_handle(),
+3
criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.tgrep-core/benches/index_build.rs
    let repo = create(file_count, bytes_per_file);
    let mut child = Command::new(std::env::current_exe().unwrap())
        .arg("--peak-memory-child")
        .arg(repo.path())
+8
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
warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.tgrep-cli/src/search.rs
/// Returns `None` if the bytes are not valid UTF-8, which is the caller's
/// signal to fall back to reading and repairing them.
///
/// Both questions need every byte, and asking them separately mea...
+5
warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.tgrep-cli/tests/watcher_watch_registration.rs
//! The descriptor-count assertion is Linux-only; Android has the same selective
//! registration design but is not exercised by this test target.

use std::fs;
+5
infoSuspicious file in repoExecutable file (benchmark.ps1) in repositoryscripts/benchmark.ps1+2
infoSuspicious file in repoExecutable file (install.ps1) in repositoryscripts/install.ps1+2
infoSuspicious file in repoVery large source file (581KB) — could contain obfuscated payloadtgrep-cli/src/serve.rs+2
infoAuthor has no other public repositoriesGitHub user "dependabot[bot]" has no other public repositories, common for burner accounts used in scams.+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.

70 files scanned @ 69e4fd0 | 9/25/2026 | heuristic scan — always review manually

risk by category
code execution25
network & exfiltration10
file system access0
obfuscation0
supply chain8
owasp / injection0
telemetry
files 70/110rules hit 11engine v6commit 69e4fd0

github

microsoft/tgrep

Trigram-indexed grep with a client/server architecture for fast regex search in large codebases locally

Rust
3354
135
175d
110 files
70 scanned(64%)
69e4fd0

architecture░▒▓

entry (0) flagged (8) pkg (60)
120 nodes · 131 edgesscroll to zoom · click node to jump to finding