Windows Defender falsely flags new releases as trojans #2266

Open
opened 2026-02-16 17:34:54 -05:00 by yindo · 14 comments
Owner

Originally created by @riatzukiza on GitHub (Oct 24, 2025).

Summary
Recent OpenCode Windows release assets are being flagged by Windows Defender with ML/heuristic signatures (e.g. Trojan:Script/Wacatac.C!ml, Program:Script/Wacapew.A!ml). Based on prior reports and cross-checks, this appears to be a recurring false positive, not evidence of compromise.

Affected / reports

  • 2025-10-24: v0.15.16 quarantined by Windows Security as Trojan:Script/Wacatac.C!ml (Windows 11 Pro)

  • Prior threads showing the same class of detection:

    • #3388 (Wacapew.A!ml heuristic)
    • #1103 (Windows detects virus on opencode-windows-x64.zip; mixed results across AV engines; some require Defender exclusions)

Hypothesis
This is a heuristic / ML false positive common to bundled CLI/GUI binaries (compression/packing, embedded resources, or unsigned artifacts) and often “goes away” after Defender definition updates. No evidence of compromise has been presented.

What we’ll do

  • Publish checksums (SHA256) for all release assets.
  • Code-sign Windows artifacts (Authenticode; timestamped) to reduce AV false positives.
  • Generate an SBOM (CycloneDX) and attach to releases.
  • Avoid packers (e.g., UPX) for Windows release builds if used.
  • Add CI AV scans for every release: Windows Defender (Windows runner), ClamAV (Linux runner), and OWASP Dependency-Check for dependencies. If any scanner flags, CI will fail and post logs.
  • Submit false positives to Microsoft with SHA256 + sample upload whenever a Defender flag occurs.
  • Track detections in this issue with dates, signatures, engine/sig versions, and hashes.

How to verify locally (Windows)

# 1) Hash
Get-FileHash -Algorithm SHA256 .\opencode-windows-x64.zip

# 2) Signature (if EXE/MSI)
Get-AuthenticodeSignature .\OpenCodeSetup.exe | Format-List *

# 3) Defender versions
Get-MpComputerStatus | Select AMEngineVersion, AntivirusSignatureVersion

# 4) Re-scan file to reproduce
"$env:ProgramFiles\Windows Defender\MpCmdRun.exe" -Scan -ScanType 3 -File .\OpenCodeSetup.exe

References

  • Current report: #3406 (Wacatac.C!ml)
  • Similar: #3388 (Wacapew.A!ml) , #1103 (zip flagged; mixed vendor results)
Originally created by @riatzukiza on GitHub (Oct 24, 2025). > **Summary** > Recent OpenCode Windows release assets are being flagged by Windows Defender with ML/heuristic signatures (e.g. `Trojan:Script/Wacatac.C!ml`, `Program:Script/Wacapew.A!ml`). Based on prior reports and cross-checks, this appears to be a recurring **false positive**, not evidence of compromise. **Affected / reports** * 2025-10-24: v0.15.16 quarantined by Windows Security as `Trojan:Script/Wacatac.C!ml` (Windows 11 Pro) * Prior threads showing the same class of detection: * #3388 (Wacapew.A!ml heuristic) * #1103 (Windows detects virus on `opencode-windows-x64.zip`; mixed results across AV engines; some require Defender exclusions) **Hypothesis** This is a **heuristic / ML false positive** common to bundled CLI/GUI binaries (compression/packing, embedded resources, or unsigned artifacts) and often “goes away” after Defender definition updates. No evidence of compromise has been presented. **What we’ll do** * [ ] **Publish checksums** (SHA256) for all release assets. * [ ] **Code-sign Windows artifacts** (Authenticode; timestamped) to reduce AV false positives. * [ ] **Generate an SBOM** (CycloneDX) and attach to releases. * [ ] **Avoid packers** (e.g., UPX) for Windows release builds if used. * [ ] **Add CI AV scans** for every release: Windows Defender (Windows runner), ClamAV (Linux runner), and OWASP Dependency-Check for dependencies. If any scanner flags, CI will fail and post logs. * [ ] **Submit false positives to Microsoft** with SHA256 + sample upload whenever a Defender flag occurs. * [ ] **Track detections** in this issue with dates, signatures, engine/sig versions, and hashes. **How to verify locally (Windows)** ```powershell # 1) Hash Get-FileHash -Algorithm SHA256 .\opencode-windows-x64.zip # 2) Signature (if EXE/MSI) Get-AuthenticodeSignature .\OpenCodeSetup.exe | Format-List * # 3) Defender versions Get-MpComputerStatus | Select AMEngineVersion, AntivirusSignatureVersion # 4) Re-scan file to reproduce "$env:ProgramFiles\Windows Defender\MpCmdRun.exe" -Scan -ScanType 3 -File .\OpenCodeSetup.exe ``` **References** * Current report: #3406 (Wacatac.C!ml) * Similar: #3388 (Wacapew.A!ml) , #1103 (zip flagged; mixed vendor results)
yindo added the windows label 2026-02-16 17:34:54 -05:00
Author
Owner

@github-actions[bot] commented on GitHub (Oct 24, 2025):

This issue might be a duplicate of existing issues. Please check:

  • #3406: Same Wacatac.C!ml detection for v0.15.16
  • #3388: Windows Defender Wacapew.A!ml detection (same ML heuristic family)
  • #1103: Windows detects virus on opencode-windows-x64.zip file

Feel free to ignore if none of these address your specific case.

@github-actions[bot] commented on GitHub (Oct 24, 2025): This issue might be a duplicate of existing issues. Please check: - #3406: Same Wacatac.C!ml detection for v0.15.16 - #3388: Windows Defender Wacapew.A!ml detection (same ML heuristic family) - #1103: Windows detects virus on opencode-windows-x64.zip file Feel free to ignore if none of these address your specific case.
Author
Owner

@Sacquer commented on GitHub (Oct 25, 2025):

Don't know if it's any help, but I encountered it on a Debian machine running wdavdaemon (https://github.com/sst/opencode/issues/3388, maybe should've written it here)

@Sacquer commented on GitHub (Oct 25, 2025): Don't know if it's any help, but I encountered it on a Debian machine running `wdavdaemon` (https://github.com/sst/opencode/issues/3388, maybe should've written it here)
Author
Owner

@riatzukiza commented on GitHub (Oct 26, 2025):

Don't know if it's any help, but I encountered it on a Debian machine running wdavdaemon (#3388, maybe should've written it here)

It would help me figure this out if you could take a look at this pr on my fork and look at the defender workflow specifically. I have no idea what I'm doing with defender, but I have the other workflows working as secondary verification that there aren't any viruses so we could automaticly compile a report to send off to microsoft to get ahead of user's experiencing the false positives.
@Sacquer

@riatzukiza commented on GitHub (Oct 26, 2025): > Don't know if it's any help, but I encountered it on a Debian machine running `wdavdaemon` ([#3388](https://github.com/sst/opencode/issues/3388), maybe should've written it here) It would help me figure this out if you could take a look at [this pr on my fork](https://github.com/riatzukiza/opencode/pull/1) and look at the defender workflow specifically. I have no idea what I'm doing with defender, but I have the other workflows working as secondary verification that there aren't any viruses so we could automaticly compile a report to send off to microsoft to get ahead of user's experiencing the false positives. @Sacquer
Author
Owner

@Sacquer commented on GitHub (Oct 27, 2025):

Sadly I don't think I'm much of help here, don't use Windows or PowerShell @riatzukiza 😿 .

@Sacquer commented on GitHub (Oct 27, 2025): Sadly I don't think I'm much of help here, don't use Windows or PowerShell @riatzukiza 😿 .
Author
Owner

@Tyler-widd commented on GitHub (Oct 30, 2025):

Workaround -
Settings
Virus & threat protection
Image

Protection history

Image

Find the opencode entry
Select allow on device

Image
@Tyler-widd commented on GitHub (Oct 30, 2025): Workaround - Settings Virus & threat protection <img width="543" height="94" alt="Image" src="https://github.com/user-attachments/assets/da7a3b32-2a00-415d-afb4-349cc2b4b784" /> Protection history <img width="211" height="46" alt="Image" src="https://github.com/user-attachments/assets/544adf90-c93e-4da3-b0c2-cea4552f7e47" /> Find the opencode entry Select allow on device <img width="1227" height="114" alt="Image" src="https://github.com/user-attachments/assets/c79345af-05ee-4ec4-b0af-07efc4582cec" />
Author
Owner

@Sacquer commented on GitHub (Oct 30, 2025):

Think you might be able to tell the daemon to ignore certain directories as well, for those that run in daemon mode, i.e. without a UI.

@Sacquer commented on GitHub (Oct 30, 2025): Think you might be able to tell the daemon to ignore certain directories as well, for those that run in daemon mode, i.e. without a UI.
Author
Owner

@jimroberts-tamu commented on GitHub (Dec 17, 2025):

I believe that the problem is that the installer does not have a publisher and in turn Windows marks the uninstaller EXE as "Blocked".

As a workaround you can right click on the uninstaller in Explorer and there will be a check box for "Unblock". Check that, click OK.

The root cause though is that the uninstaller is missing a publisher.

Edit: This is most likely the same issue that you will encounter when running the when you are prompted to upgrade to 1.0.164.

@jimroberts-tamu commented on GitHub (Dec 17, 2025): I believe that the problem is that the installer does not have a publisher and in turn Windows marks the uninstaller EXE as "Blocked". As a workaround you can right click on the uninstaller in Explorer and there will be a check box for "Unblock". Check that, click OK. The root cause though is that the uninstaller is missing a publisher. Edit: This is most likely the same issue that you will encounter when running the when you are prompted to upgrade to 1.0.164.
Author
Owner

@Xavier-Burger commented on GitHub (Jan 10, 2026):

Interesting that this occurs on much older versions still.

I danced with this issue today for v1.1.12, and found I could get windows to shut up after explicitely installing 1.1.8. Not sure why this version specifically is working for me.

I was testing versions on my work machine, where I don't have the luxury of allowing threats.

Heres my steps for getting it to work (for my setup, wezterm, powershell, opencode via npm -g):

https://github.com/anomalyco/opencode/issues/7655#issuecomment-3733104534

@Xavier-Burger commented on GitHub (Jan 10, 2026): Interesting that this occurs on much older versions still. I danced with this issue today for v1.1.12, and found I could get windows to shut up after explicitely installing 1.1.8. Not sure why this version specifically is working for me. I was testing versions on my work machine, where I don't have the luxury of allowing threats. Heres my steps for getting it to work (for my setup, wezterm, powershell, opencode via npm -g): https://github.com/anomalyco/opencode/issues/7655#issuecomment-3733104534
Author
Owner

@Mirrowel commented on GitHub (Jan 11, 2026):

This is a common windows defender L. This can trigger for archives with no binaries whatsoever.

WIndows defender is nothing but trouble - disable it.

@Mirrowel commented on GitHub (Jan 11, 2026): This is a common windows defender L. This can trigger for archives with no binaries whatsoever. WIndows defender is nothing but trouble - disable it.
Author
Owner

@Makishima commented on GitHub (Jan 11, 2026):

@riatzukiza Just to be fair, could you please upload the file to https://www.virustotal.com/gui/home/upload?

@Makishima commented on GitHub (Jan 11, 2026): @riatzukiza Just to be fair, could you please upload the file to https://www.virustotal.com/gui/home/upload?
Author
Owner

@nUser0 commented on GitHub (Jan 12, 2026):

The suspicious file is blocked, but the open code function works normally. It means that the dll it releases is not necessary?

@nUser0 commented on GitHub (Jan 12, 2026): The suspicious file is blocked, but the open code function works normally. It means that the dll it releases is not necessary?
Author
Owner

@nUser0 commented on GitHub (Jan 12, 2026):

It seems that the result of blocked files is that automated tests cannot run?

@nUser0 commented on GitHub (Jan 12, 2026): It seems that the result of blocked files is that automated tests cannot run?
Author
Owner

@rekram1-node commented on GitHub (Jan 12, 2026):

I think we need code signing to prevent this

@rekram1-node commented on GitHub (Jan 12, 2026): I think we need code signing to prevent this
Author
Owner

@Adamkadaban commented on GitHub (Jan 21, 2026):

I wasn't able to repro this for some reason. If you would like to look for workarounds, this tool can help identify what strings defender is flagging on: https://github.com/rasta-mouse/ThreatCheck

But yes, the real solution is signing binaries. This can be a bit expensive, unfortunately, but it may be possible to get one for free or at a discount since this project is open source uses gh actions.

If none of those work, I think azure basic tier artifact signing would also work.

I use opencode all the time on linux. Would love to use on windows (cc issue about arm64)!

@Adamkadaban commented on GitHub (Jan 21, 2026): I wasn't able to repro this for some reason. If you would like to look for workarounds, this tool can help identify what strings defender is flagging on: https://github.com/rasta-mouse/ThreatCheck But yes, the real solution is signing binaries. This can be a bit expensive, unfortunately, but it may be possible to get one for free or at a discount since this project is open source uses gh actions. - https://signpath.org/ - https://ossign.org/ - https://www.certum.eu/en/ If none of those work, I think azure basic tier artifact signing would also work. I use opencode all the time on linux. Would love to use on windows (cc issue about arm64)!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: anomalyco/opencode#2266