This document analyzes the GovCERT-CH blocked file extensions list through the lens of the TLCTC framework's three-tier model. The original list conflates fundamentally different threat mechanisms—a problem that leads to false confidence and misallocated control strategies.
The GovCERT-CH list mixes:
- Tier 1 (pure #7): Native executables that ARE the threat
- Tier 2 (#1→#7): Application-mediated formats that ENABLE the threat
- Tier 3 (#2/#3→#7): Data formats that require parser BUGS to become threats
This conflation matters because each tier requires different control strategies.
The GovCERT-CH Original Categories
The original list uses these categories:
- Archive files
- Code files
- Executables
- Media files
- Microsoft Office / OpenDocument
- Other
TLCTC Critique: These categories are based on format function rather than threat mechanism. A more principled approach classifies by how the format achieves execution—which directly determines the appropriate control strategy.
TLCTC Three-Tier Restructured List
TIER 1: Native/Direct FEC (pure #7)
Threat Mechanism: The OS loader or runtime directly executes the file. The file IS the Foreign Executable Content. No intermediate application processing required.
Control Strategy: Block execution (application allowlisting, SmartScreen, email gateway blocking). The control question is: "Should this code be allowed to run?"
Attack Velocity: Fastest—execution occurs immediately upon invocation.
Windows PE Executables
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .exe | Windows executable | ✓ | Core FEC—must block |
| .dll | Dynamic link library | ✓ | Can be loaded/executed via rundll32, regsvr32 |
| .com | DOS command file | ✓ | Legacy but still functional |
| .scr | Screensaver (executable) | ✓ | Actually a .exe with different extension |
| .sys | System driver | ✓ (implicit) | Kernel-level execution—MISSING from list |
| .ocx | OLE Control Extension | ✓ | ActiveX controls—executable COM objects |
| .cpl | Control Panel extension | ✓ (via other lists) | Executable DLL—MISSING from GovCERT |
| .drv | Device driver | ✗ | MISSING—add to blocklist |
| .efi | EFI bootloader | ✗ | MISSING—firmware-level execution |
Windows Script Files (Direct Interpreter Execution)
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .bat | Batch file | ✓ | cmd.exe executes directly |
| .cmd | Windows NT batch | ✓ | cmd.exe executes directly |
| .ps1 | PowerShell script | ✓ | PowerShell engine executes |
| .ps1xml | PowerShell XML script | ✓ | PowerShell format/type data |
| .ps2 | PowerShell v2 script | ✓ | Legacy PowerShell |
| .ps2xml | PowerShell v2 XML | ✓ | Legacy format |
| .psc1 | PowerShell console file | ✓ | Configures and launches PowerShell |
| .psc2 | PowerShell v2 console | ✓ | Legacy console file |
| .vbs | VBScript | ✓ | wscript.exe/cscript.exe executes |
| .vbe | Encoded VBScript | ✓ | Obfuscated VBS—same execution path |
| .js | JavaScript (Windows) | ✓ | JScript via wscript.exe |
| .jse | Encoded JScript | ✓ | Obfuscated JS—same execution path |
| .ws | Windows Script | ✓ | Windows Script Host file |
| .wsc | Windows Script Component | ✓ | COM scriptlet |
| .wsf | Windows Script File | ✓ | Multi-language script container |
| .wsh | Windows Script Host settings | ✓ | Configures script execution |
| .msc | Microsoft Management Console | ✓ (via other) | MISSING from GovCERT |
| .sct | Windows Scriptlet | ✓ (via other) | MISSING from GovCERT—COM scriptlet |
| .psd1 | PowerShell data file | ✗ | MISSING—module manifest |
| .psm1 | PowerShell module | ✗ | MISSING—importable module |
Unix/Cross-Platform Scripts
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .sh | Shell script | ✓ | bash/sh executes directly |
| .bash | Bash script | ✓ (implicit) | Shell execution |
| .csh | C Shell script | ✓ | csh interpreter |
| .ksh | Korn Shell script | ✓ | ksh interpreter |
| .pl | Perl script | ✓ | Perl interpreter |
| .py | Python script | ✗ | MISSING—critical omission |
| .pyc | Compiled Python | ✗ | MISSING—bytecode execution |
| .pyw | Python (no console) | ✗ | MISSING—windowless Python |
| .rb | Ruby script | ✗ | MISSING—Ruby interpreter |
| .lua | Lua script | ✗ | MISSING—embedded scripting |
Java/JVM & Windows Installer/Package
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .jar | Java Archive | ✓ | JVM executes bytecode |
| .class | Java class file | ✓ | Compiled Java bytecode |
| .jnlp | Java Web Start | ✓ | Launches Java applications |
| .war | Web application archive | ✗ | MISSING—server deployment |
| .ear | Enterprise archive | ✗ | MISSING—J2EE deployment |
| .msi | Windows Installer | ✓ | msiexec.exe processes—executes |
| .msp | Windows Installer Patch | ✓ | Patch package with execution |
| .mst | MSI Transform | ✓ | Modifies MSI behavior |
| .msix | Modern Windows package | ✗ | MISSING—modern installer |
| .appx | Windows Store package | ✗ | MISSING—UWP apps |
| .appxbundle | App bundle | ✗ | MISSING—multi-arch package |
Shortcut/Reference Files (Execution Indirection)
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .lnk | Windows shortcut | ✓ | Critical—can execute anything |
| .url | Internet shortcut | ✓ | Can trigger protocol handlers |
| .pif | Program Information File | ✓ | DOS shortcut—legacy but dangerous |
| .scf | Shell Command File | ✓ (via other) | MISSING—Explorer command file |
| .inf | Setup Information | ✓ (via other) | MISSING—can execute via right-click |
| .application | ClickOnce manifest | ✗ | MISSING—.NET deployment |
| .appref-ms | ClickOnce reference | ✗ | MISSING—app reference |
| .settingcontent-ms | Settings shortcut | ✗ | MISSING—CVE-2018-8414 vector |
Platform-Specific Executables
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .app | macOS application bundle | ✓ | macOS executable package |
| .dmg | macOS disk image | ✓ | Contains mountable filesystem |
| .pkg | macOS installer | ✗ | MISSING—macOS installer |
| .deb | Debian package | ✓ | Linux package with scripts |
| .rpm | Red Hat package | ✓ | Linux package with scripts |
| .snap | Snap package | ✗ | MISSING—Linux snap |
| .flatpak | Flatpak package | ✗ | MISSING—Linux flatpak |
| .apk | Android package | ✗ | MISSING—mobile execution |
| .ipa | iOS application | ✗ | MISSING—iOS package |
TIER 2: Application-Mediated FEC (#1 → #7)
Threat Mechanism: An application processes the file through its designed functionality (#1 Abuse of Functions), which then enables embedded code execution (#7). The file ENABLES execution through a legitimate feature.
Control Strategy: Disable the enabling feature (macros, scripting, active content). Multiple intervention points exist in the chain. The control question is: "Should this feature be enabled for this content?"
Attack Velocity: Intermediate—requires application to process file, then execute embedded content.
Microsoft Office (Macro-Enabled) & Legacy Formats
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .docm | Word macro-enabled | ✓ | VBA execution via macro engine |
| .xlsm | Excel macro-enabled | ✓ | VBA + Excel-specific threats (XLM) |
| .pptm | PowerPoint macro-enabled | ✓ | VBA execution |
| .potm | PowerPoint macro template | ✓ | Template with macros |
| .dotm | Word macro template | ✓ | Template with macros |
| .xltm | Excel macro template | ✓ | Template with macros |
| .xlsb | Excel binary workbook | ✗ | MISSING—binary format can contain macros |
| .xlam | Excel add-in | ✗ | MISSING—auto-loading macro add-in |
| .ppam | PowerPoint add-in | ✗ | MISSING—auto-loading add-in |
| .sldm | PowerPoint macro slide | ✗ | MISSING—single slide with macros |
| .xla | Excel 97-2003 add-in | ✗ | MISSING—legacy add-in |
| .xll | Excel DLL add-in | ✗ | CRITICAL MISSING—native code add-in |
| .doc | Word 97-2003 | Partial | Can contain macros—often allowed |
| .xls | Excel 97-2003 | Partial | Can contain macros + XLM |
| .ppt | PowerPoint 97-2003 | Partial | Can contain macros |
| .rtf | Rich Text Format | ✗ | CAUTION—OLE embedding, CVE-2017-0199 |
| .slk | Symbolic Link (Excel) | ✗ | MISSING—SYLK macro execution |
| .iqy | Excel Web Query | ✗ | MISSING—can execute code |
| .prn | Excel print file | ✗ | MISSING—can be renamed SYLK |
| .dif | Data Interchange Format | ✗ | MISSING—Excel formula injection |
OpenDocument, HTML, PDF & Server-Side
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .odt | OpenDocument text | ✓ (partial) | Can contain macros |
| .ods | OpenDocument spreadsheet | ✓ (partial) | Can contain macros |
| .odp | OpenDocument presentation | ✓ (partial) | Can contain macros |
| .ott/ots/otp | OpenDoc templates | ✗ | MISSING—template with macros |
| .hta | HTML Application | ✓ | mshta.exe processes—full system access |
| .mht/.mhtml | MIME HTML | ✓ | Single-file web archive with scripts |
| .htm/.html | HTML files | ✗ | CONTEXT-DEPENDENT—local HTML can execute JS |
| .chm | Compiled HTML Help | ✓ (via other) | MISSING from GovCERT—embedded scripts |
| .svg | Scalable Vector Graphics | ✗ | MISSING—can contain JavaScript |
| PDF with JS | Partial | Reader processes (#1) → JS executes (#7) | |
| .fdf/.xfdf | Forms Data Format | ✗ | MISSING—can trigger PDF actions |
| .xdp | XML Data Package | ✓ | Adobe form container |
| .asp/.aspx | Active Server Pages | Partial | IIS processes—server execution |
| .php/.jsp | Server scripts | ✗ | MISSING—server execution |
Database & Configuration Files with Execution
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .mdb | Access database | ✓ (via other) | MISSING—can contain VBA |
| .mde | Compiled Access | ✗ | MISSING—compiled Access with VBA |
| .accdb | Access 2007+ | ✗ | MISSING—can contain macros |
| .accde | Compiled Access 2007+ | ✗ | MISSING |
| .adp/.ade | Access project | ✓ (via other) | Access Data Project |
| .reg | Registry file | ✓ (via other) | MISSING from GovCERT—modifies system |
| .vb/.bas | VB/BASIC source | ✓ | Can be compiled/run |
| .wml | Wireless Markup | ✓ | WMLScript execution |
| .xbap | XAML Browser App | ✓ | .NET browser application |
| .gadget | Windows Gadget | ✗ | MISSING—HTML/JS execution |
| .diagcab | Diagnostic Cabinet | ✗ | MISSING—can execute scripts |
TIER 3: Data Formats Requiring Parser Exploits (#2/#3 → #7)
Threat Mechanism: No designed execution capability. Code execution requires exploiting an implementation flaw (buffer overflow, heap corruption, integer overflow, etc.) in the parser, codec, or renderer.
Control Strategy: Patch parsers, sandbox processing, use memory-safe implementations. The control question is: "Is my parser implementation safe?" Blocking is defense-in-depth but does NOT address the root vulnerability.
CRITICAL INSIGHT: For Tier 3, an exhaustive blocklist is impossible. ANY file format with a parser is a potential attack surface. The GovCERT list's inclusion of these formats creates false confidence if blocking is seen as the primary control.
Image, Video, Audio & Documents
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .jpg/.jpeg | JPEG image | ✓ | Parser exploits (CVE-2004-0200) |
| .png | PNG image | Partial | libpng vulnerabilities |
| .gif/.bmp | GIF/Bitmap | ✓ | Parser exploits |
| .webp | WebP image | ✗ | CVE-2023-4863—critical parser bug |
| .tiff | TIFF image | ✗ | Complex format—many parser bugs |
| .svg | SVG | ✗ | DUAL: can contain JS (Tier 2) + parser bugs |
| .emf/.wmf | Metafiles | ✗ | MISSING—historic exploit vector |
| .heic/.avif | HEIC/AVIF | ✗ | Modern formats—parser bugs exist |
| .mp4/.avi | Video | ✓ | Codec exploits |
| .mkv/.webm | Video | ✗ | Container/Codec exploits |
| .docx/.xlsx | Office (Non-Macro) | ✗ | Parser bugs (ZIP, XML, OLE) |
| PDF (no JS) | Partial | Parser exploits without JS |
Fonts, Archives & Serialization
| Extension | Description | GovCERT | Comment |
|---|---|---|---|
| .ttf/.otf | Fonts | ✗ | MISSING—font rasterizer exploits |
| .woff | Web fonts | ✗ | MISSING—browser font parsing |
| .zip/.rar/.7z | Archives | ✓ | Parser exploits + can contain FEC |
| .tar/.gz | Unix Archives | ✓ | Parser/Decompression bugs |
| .xz | XZ compressed | ✓ | Also backdoor vector (XZ Utils) |
| .iso/.img/.vhd | Disk Images | ✓ | Filesystem parser bugs |
| .zst/.lz4 | Modern Compression | ✗ | MISSING—modern compression |
| .json | JSON data | ✗ | Parser bugs + deserialization |
| .yaml/.yml | YAML data | ✗ | DANGEROUS—deserialization exploits |
| .pickle/.pkl | Python pickle | ✗ | CRITICAL—arbitrary code execution |
Missing File Types Summary
Critical Additions for Tier 1 (Must Block)
- PowerShell modules:
.psd1,.psm1 - Python (increasingly common):
.py,.pyc,.pyw,.pyz,.pyzw - Modern Windows/Deployment:
.msix,.appx,.appxbundle,.application,.appref-ms,.settingcontent-ms - System & Script:
.sys,.drv,.cpl,.efi,.msc,.sct,.scf,.inf - Mobile:
.apk,.ipa
Critical Additions for Tier 2 (Should Block/Disable Feature)
- Excel specifics:
.xlsb,.xlam,.xla,.xll,.slk,.iqy,.dif - Access databases:
.accdb,.accde,.mdb,.mde - Execution capable:
.chm,.svg,.reg,.gadget,.diagcab - Server-side:
.aspx,.asmx,.php,.jsp
Tier 3 Additions (Parser Vulnerability Surface)
- Fonts:
.ttf,.otf,.woff,.woff2,.eot - Modern Images:
.webp,.heic,.heif,.avif - Legacy Vectors:
.emf,.wmf - Serialization/Compression:
.yaml,.yml,.pickle,.pkl,.zst,.lz4
The Fundamental Problem with the GovCERT Approach
The GovCERT-CH list, while operationally useful, exhibits several conceptual problems when analyzed through TLCTC:
- Conflation of Threat Mechanisms: Grouping by format category (archives, media) ignores that Tier 1 formats are dangerous BY DESIGN, Tier 2 are dangerous BY FEATURE, and Tier 3 are dangerous BY BUG.
-
False Confidence Through Tier 3 Blocking: Blocking
.jpgat the email gateway creates false confidence. Users still encounter images on websites, USB drives, etc. The real control is patching parsers (libjpeg, libpng). - Incomplete Tier 1 Coverage: Missing critical FEC-capable formats like the Python ecosystem and modern Windows packages leaves gaping holes.
-
No Contextual Differentiation: The list cannot express that
.exein a CI/CD pipeline is expected, while.exein email is suspicious. TLCTC's boundary notation (||[context][@Source→@Target]||) enables this differentiation.
Recommended Control Strategy by Tier
For Tier 1 (Native FEC)
- Block at email gateway — Essential
- Application allowlisting — Prevents execution
- SmartScreen/reputation — Warns on unknown
- Code signing — Validates publisher
For Tier 2 (App-Mediated)
- Disable macros by default — Breaks #1→#7
- Protected View — Sandboxes before enabling
- Block external macro formats
- ASR rules — Blocks child processes
For Tier 3 (Parser Exploits)
- Patch management — Primary control
- Memory-safe languages — Long-term solution
- Sandboxing — Contains exploitation
- Extension blocking — Defense-in-depth only
Conclusion
The GovCERT-CH list is a valuable operational resource, but its effectiveness is limited by conceptual conflation. Organizations should:
- Classify their blocklist by TLCTC tier to understand why each format is blocked.
- Ensure complete Tier 1 coverage — these are the formats that matter most.
- Implement Tier 2 feature controls — blocking alone is insufficient.
- Recognize Tier 3 limitations — blocking is defense-in-depth, not the primary control.
The file extension is just a hint—the threat model is what matters.
References
- TLCTC V2.0 Whitepaper
- GovCERT-CH Blocked Filetypes: GitHub
- "The File Type Fallacy" — TLCTC Blog, January 2026
- Microsoft Common Attachment Filter
- Chrome Safe Browsing File Type Policies
- badfiles.ch aggregated data