Skip to content
Browser Can Lie to You (Sometimes): An Odd Finding About Download Interrupt Reason 41

Browser Can Lie to You (Sometimes): An Odd Finding About Download Interrupt Reason 41

July 6, 2026Digital Forensics
Author
Chicken0248
Published
July 6, 2026
Category
Digital Forensics
Introduction

Hey everyone, it's me, Chicken0248. In this blog I want to share a finding about Chromium browser behavior that came up while I was authoring the WorkFromHome Sherlock challenge on HackTheBox. You probably already guessed what it is from the title. It's about the download interrupt reason.

So what is the download interrupt reason exactly? It's a value stored in the downloads history table of any Chromium-based browser. When you download a file, a lot of things can happen along the way: the download finishes, the browser cancels it, the user cancels it, the connection drops, the browser crashes, and so on. To give users and support teams some visibility into what went wrong, Chromium records a numeric interrupt reason for each download, so you know what happened and what to try next time.

Chromium download interrupt reason value in the downloads history table
The interrupt reason is a numeric value Chromium writes for every download.

You can look up all the defined interrupt reasons directly in the Chromium source code at download_interrupt_reason_values.h and trace how each one gets written to the database.

download_interrupt_reason_values.h in the Chromium source tree
download_interrupt_reason_values.h defines every interrupt reason in the Chromium source.

I won't dig too deep into the source code here since that's not what this post is about. Ryan Benson, the author of Hindsight, which is the most thorough and practically useful browser artifact parser I've worked with, already did the heavy lifting. He published a great reference covering Chrome Danger Types, Interrupt Reasons, and Download States in his post Chrome Values Lookup Tables.

Ryan Benson's Chrome Values Lookup Tables reference
Ryan Benson's lookup tables map the numeric values to readable meanings.

Alright, enough background. This whole post is really just about one thing: interrupt reason 41 and why it's not as clear-cut as it looks.

My Finding on Interrupt Reason 41

Let's start with what the source code actually says. The comment for interrupt reason 41 reads: "The user shutdown the browser." with an internal note: "Internal use only: resume pending downloads if possible."

Source code comment for interrupt reason 41 describing user browser shutdown
The source comment for reason 41: the user shut down the browser.

Ryan's blog labels it Browser Shutdown and carries the same description.

Ryan Benson's lookup table entry labeling reason 41 as Browser Shutdown
The lookup table entry for reason 41: Browser Shutdown.

In my testing, Chromium-based browsers do save this value when you close the browser mid-download, confirmed across Microsoft Edge, Google Chrome, and Brave. But here's the thing: downloads blocked by Google Safe Browsing (Chrome) and Microsoft Defender SmartScreen (Edge) are also saved with interrupt_reason = 41. That overlap matters. It can change how you interpret what a user actually did, and producing accurate, evidence-grounded conclusions is what our job is about as digital forensics examiners.

Don't just take my word for it though. Here's how I tested each browser, and you can reproduce it yourself.

Microsoft Edge (With SmartScreen)

My methodology was the same across all browsers: download something and close the browser while it's still going, then reopen and download something that triggers the browser's built-in defense mechanism. For Edge, that's Microsoft Defender SmartScreen.

I downloaded the Brave Browser installer twice and canceled both by shutting Edge down. Then I reopened Edge and tried to download a netcat executable from GitHub. SmartScreen flagged it immediately.

Microsoft Defender SmartScreen blocking a netcat download in Edge
SmartScreen blocks the netcat download in Edge.

I closed Edge first to release the lock on the History SQLite file, then opened it in DB Browser for SQLite to inspect the downloads table.

Edge downloads table in DB Browser for SQLite showing interrupt_reason 41
Both the canceled installers and the blocked netcat download share state 2 and interrupt_reason 41.

Both the canceled Brave installer downloads and the SmartScreen-blocked netcat download had identical state and interrupt_reason values: state = 2 (Cancelled) and interrupt_reason = 41 for all entries. Not state 3 or 4 (Interrupted), just plain Cancelled, same interrupt reason as a normal browser shutdown.

So SmartScreen produces this value. What about Google Safe Browsing?

Google Chrome (With Safe Browsing)

I started by closing Chrome while the Kali Linux VM was downloading. Then I tried to get netcat and Rubeus, but Windows Defender jumped in first and produced interrupt_reason = 7 (Virus Detected), which wasn't what I was testing for. So I disabled Defender and retried. Chrome let both through without a peep. Interesting choice, Google.

Chrome downloading netcat and Rubeus after Windows Defender is disabled
With Defender off, Chrome lets netcat and Rubeus through.

I turned Defender back on and switched to Mimikatz instead. There's basically no way Google Safe Browsing lets that one through. It didn't.

Google Safe Browsing blocking a Mimikatz download in Chrome
Safe Browsing blocks the Mimikatz download in Chrome.

Looking at the downloads table afterward, the state and interrupt_reason were identical across all entries. One small aside: the blocked Mimikatz download was saved with danger_type = 7 (Dangerous Host) rather than danger_type = 3 (Dangerous Content), but that doesn't change the main point. Safe Browsing blocked the download and the browser recorded interrupt_reason = 41, the same value as closing the browser during a download.

Chrome downloads table showing interrupt_reason 41 with danger_type 7
The Safe Browsing block records interrupt_reason 41, matching a browser shutdown.

Chromium (Vanilla)

Vanilla Chromium has neither Google Safe Browsing nor Microsoft Defender SmartScreen baked in. My expectation was simple: security-flagged downloads should not produce interrupt reason 41 here. They'd either get reason 7 if Windows Defender steps in, or complete fine if Defender is off.

I closed Chromium mid-download (Kali Linux VM again), then downloaded Mimikatz with Defender on. Defender caught it, reason 7 as expected. Disabled Defender, downloaded again and it completed with no interrupt.

Windows Defender catching a Mimikatz download in vanilla Chromium
Vanilla Chromium has no browser-level defense, so Windows Defender handles the block with reason 7.

Everything lined up. Without browser-level defense mechanisms in the picture, the interrupt reason behavior is predictable and unambiguous.

Chromium downloads table with predictable interrupt reason values
No browser-level defense means no reason 41 surprises.

Brave Browser

Brave has no Safe Browsing and no SmartScreen, so I expected the same pattern as vanilla Chromium.

I closed Brave while downloading the Kali Linux VM, then tried to grab netcat. Windows Defender stopped it, as expected.

Windows Defender stopping a netcat download in Brave
Windows Defender stops the netcat download in Brave.

Disabled Defender, downloaded netcat and Mimikatz, both went through fine.

Brave downloading netcat and Mimikatz with Defender disabled
With Defender off, both downloads complete in Brave.

All three download events recorded exactly as expected, matching the Chromium results.

Brave downloads table matching the vanilla Chromium results
Brave's downloads table matches vanilla Chromium.
Summary

Sometimes users download malicious files on purpose. Sometimes the browser flags a legitimate dual-use tool. Either way, interrupt_reason = 41 by itself does not tell you which one happened.

When you see that value, you need to look at the surrounding context: danger_type, state, and the download URL. Without that correlation, you can't reliably distinguish a user closing the browser mid-download from a security block by Google Safe Browsing or Microsoft Defender SmartScreen, both of which produce the exact same interrupt reason in Edge and Chrome.

Reason 41 is ambiguous on Edge and Chrome. Before you conclude a user closed the browser mid-download, correlate danger_type, state, and the download URL to rule out a SmartScreen or Safe Browsing block.

As forensics examiners, our job is to give accurate conclusions backed by evidence. That means knowing when a number is ambiguous and when you need more context before committing to an interpretation.

Part 2 is up: A Failed Security Check That Still Landed the File, about interrupt reason 12 and how a failed security check leaves the complete file on disk even though the download shows as interrupted.