Vulnerabilities
desktop.ini vs Thumbs.db on Production CDNs
May 27, 2023
desktop.ini vs Thumbs.db on production CDNs is two Windows leftovers next to index.html. desktop.ini is a folder-customization file (icon, InfoTip, localized name) that can list paths and sometimes point at a .ico you also uploaded. Thumbs.db is a thumbnail cache that can name images from the folder someone zipped. .DS_Store is the Mac cousin. None of them are access control. Autoindex off does not delete them. RoastMyOpsec probes /.DS_Store with a bounded GET and a binary signature. It does not currently score /desktop.ini or /Thumbs.db, does not parse INI or thumbnail databases, and does not crawl every prefix looking for nested leftovers.
The practical difference
Thumbs.db is a cache of pictures. desktop.ini is Explorer metadata for that folder. Mixed shops ship both plus .DS_Store. The leak is names and sometimes icon paths — not usually the file bytes, but enough to map backup.zip sitting beside them.
CI that only greps .DS_Store still ships Windows junk from a designer zip. Deny all three names at the CDN.
How to choose what to strip
CI: fail the build if desktop.ini, Thumbs.db, ehthumbs.db, or .DS_Store appear in the artifact. CDN: deny those basenames even if CI is perfect. Do not 'clean once' on a laptop and call it a pipeline. Nested /assets/product/desktop.ini counts.
| Leftover | Typical OS | What it often reveals | Takeaway |
|---|---|---|---|
| /.DS_Store | macOS | Filenames from Finder | Scored path on the roast |
| /Thumbs.db | Windows | Image names from a folder | Same class; deny anyway |
| /desktop.ini | Windows | Folder icon and names | Not a scored roast path; strip it |
| Index of / | Server feature | The whole tree | See directory listing vs 403 |
When desktop.ini still belongs (not on the CDN)
A Windows share that users browse in Explorer can keep desktop.ini. A public object store cannot. Pair with dump.sql vs backup.zip if the same zip also held a database.
What the roast can prove
A .DS_Store signature on a bounded GET can surface. desktop.ini is not scored. Confirm a 404 yourself. Pair with .htaccess vs web.config if the same Windows zip also shipped IIS config.
Common mistakes
The first mistake is stripping only .DS_Store because the Mac laptops were the known problem.
The second mistake is allowing desktop.ini because 'it is just an INI.'
The third mistake is Disallow: /desktop.ini and calling it access control.
Free audit the URL you own
RoastMyOpsec is a defensive public-surface roast: headers, cookies, sensitive paths, and more — no exploit payloads. Start with the free audit, then open the vault if the blurred findings look expensive.
Free audit nowFAQ
- Is desktop.ini a vulnerability?
- It is an information leak. Remove it and deny the name. It is not a credential dump by itself.
- Does RoastMyOpsec check desktop.ini?
- The bounded path list includes .DS_Store. Treat desktop.ini and Thumbs.db as the same hygiene even if this scan does not score them.
- Will the scanner parse INI files?
- No. Signature checks only. No recursive dump, no exploit payload.
Sources
Related guides
Vulnerabilities
Thumbs.db vs .DS_Store on Production CDNsVulnerabilities
.DS_Store vs Directory Listing for Leftovers on ProductionVulnerabilities
.htaccess vs web.config on a Public Origin