惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
P
Proofpoint News Feed
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
A
About on SuperTechFans
T
Tenable Blog
M
MIT News - Artificial intelligence
IT之家
IT之家
I
Intezer
D
DataBreaches.Net
爱范儿
爱范儿
T
Threatpost
C
CERT Recently Published Vulnerability Notes
云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
Cyberwarzone
Cyberwarzone
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AWS News Blog
AWS News Blog
博客园 - 聂微东
C
Check Point Blog
S
Securelist
有赞技术团队
有赞技术团队
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
G
GRAHAM CLULEY
T
The Exploit Database - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
L
Lohrmann on Cybersecurity
G
Google Developers Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog

The Eclectic Light Company

Hero or hooligan: Theseus’ later years BSD flags are incompatible with iCloud Drive Apple has released macOS Tahoe 26.5.1 In memoriam Mary Cassatt: 1, 1868-1880 Solutions to Saturday Mac riddles 362 What Location Services do in macOS Eclectic paintings of Joseph Stella: 2 European myths Last Week on My Mac: Razzle and dazzle Eclectic paintings of Joseph Stella: 1 American landscapes Saturday Mac riddles 362 Protect files with the Locked or Immutable flag Reading Visual Art: 252 Dragonfly What happens in the log when an app crashes as it starts up? Portraits of trees: Introduction On Reflection: Conclusions and contents Which tasks require mains power? Medium and message: Vast canvases Online reference to external displays for Apple silicon Macs What’s in that phishing email? Hero or hooligan: Theseus and Ariadne Solutions to Saturday Mac riddles 361 How to search document versions Rubens’ Consequences of War Rubens’ Peace and War Saturday Mac riddles 361 How to search Time Machine backups? Naturalists: Contents and artists On Reflection: Extending the image Tackle QuickLook problems Medium and message: Pottery Hero or hooligan: Theseus and the sandals How QuickLook provides thumbnails and previews Last Week on My Mac: Syncing metadata in iCloud Drive Paintings of visits to India 1778-1877 Saturday Mac riddles 360 Naturalists: Sorolla and Zorn On Reflection: Pierre Bonnard 1909-1946 SpotTest 1.2 can display Spotlight metadata directly On Reflection: Pierre Bonnard 1899-1908 How to preserve versions, and how to create versioned PDFs Medium and message: Sculpture What gets synced in iCloud Drive? Hero or hooligan: Perseus 2 Solutions to Saturday Mac riddles 359 Last Week on My Mac: snapshots, the elephant in APFS Paintings of Beatrice Portinari: to 1862 Saturday Mac riddles 359 Naturalists: Into the 20th century How to check whether Spotlight is getting the right metadata On Reflection: Mirror play Hero or hooligan: Perseus 1 The bicentenary of Frederic Edwin Church: 1857-77 Solutions to Saturday Mac riddles 358 macOS virtual machines and audio-video syncing A walk in the parks of Rome, Vienna, Manhattan and Brooklyn Saturday Mac riddles 358 Naturalists: Photography Use Finder tags for categories Control what gets written to the log Medium and message: Tapestry Virtualisation on Apple silicon Macs is different Jerusalem Delivered: Overview and contents The bicentenary of Frederic Edwin Church: 1849-57 Solutions to Saturday Mac riddles 357 Painting Pandora and her box: 1883-1919 Painting Pandora and her box: 1550-1882 Saturday Mac riddles 357 Reading Visual Art: 250 Winged sandals The secret life of the xattr The macOS Natural Language framework and Nalaprop Medium and Message: Stained glass The MACL extended attribute Jerusalem Delivered: 13 Leading characters Solutions to Saturday Mac riddles 356 Privacy: How locations are protected Painting Spring blossom 2 Last Week on My Mac: Don’t be a victim of fraud Painting Spring blossom 1 Saturday Mac riddles 356 Explainer: Recovery Reading Visual Art: 249 Mask Naturalists: Urban poverty On Reflection: Cézanne Privacy: Which folders are protected in Tahoe? Medium and Message: Mosaic Jerusalem Delivered: 12 Delivery Solutions to Saturday Mac riddles 355 Centaurs 2: Revenge Centaurs 1: Fights Saturday Mac riddles 355 Explainer: sandboxes Naturalists: The modern meal Why you can’t trust Privacy & Security Apple has just released an update to macOS Tahoe, to version 26.4.1 On Reflection: Divisionism Please help update CPU frequencies for Apple silicon Macs Commemorating the centenary of the death of John Ferguson Weir Privacy: Files & Folders or Full Disk Access? Jerusalem Delivered: 11 Into Jerusalem Privacy: protected folders
Why can’t Preview open that PDF?
hoakley · 2026-06-11 · via The Eclectic Light Company

Almost seven years ago, in late 2019, some apps started refusing to open perfectly good documents for bizarre reasons, such as claiming a PDF file was a malicious app that couldn’t be checked. Although this may have become less frequent in recent years, the behaviour and reasons haven’t changed much since. Worst affected has been Preview with PDF files, and when I was struck yet again by this in Tahoe 26.5.1 I thought it was time to re-examine this persistent problem.

Setup

Partly because of these problems, I wrote my own PDF viewer Podofyllin which isn’t sandboxed, and I have that set as the default app to open PDF files. However, I have noticed that changing that default to Preview for an individual PDF is likely to result in Preview’s misbehaviour. This has provided a reproducible model for testing Preview’s rejection of valid and benign PDFs, which otherwise can appear almost random.

At the time, a novel extended attribute com.apple.macl was implicated, which was unfortunate as it’s one of the few xattrs that’s protected by SIP, thus can’t be removed in place without disabling SIP globally. Since then, another related xattr has been used widely for security purposes, com.apple.provenance, although that hasn’t been implicated here. There’s also one of the oldest xattrs of them all, com.apple.quarantine, which is now applied promiscuously by sandboxed apps like Preview to files that have never left local storage.

Although contents of com.apple.macl and com.apple.provenance are opaque references, com.apple.quarantine contains a simple string, like
0082;69f902b9;Pages;09540EA0-17C7-42FF-A96A-B3909E45F9DE
where the first four characters are the quarantine flag itself. Most commonly, the third character is set to 8 when that file is still in quarantine, and changed to c when it has cleared quarantine. My utility xattred can not only add its own quarantine xattrs, but can be used to edit them, for example by changing the flag between x8xx and xcxx (or any other values).

All tests were performed on a Mac mini M4 Pro running macOS 26.5.1 Tahoe with a largely vanilla setup, Full Security and SIP enabled.

Opening PDF files

In all conditions used for testing, Podofyllin opened all PDFs it was asked to, without reporting any problems.

Preview behaved differently, according to how it was asked to open a file, and the flag state of the com.apple.quarantine xattr attached to the PDF file:

  • When the default app was changed to Preview, double-clicking the PDF invariably resulted in refusal shown above when the quarantine flag was 8, but the file opened without any warning when the flag was c.
  • With the default app left as Podofyllin, opting to open the PDF in Preview using the Finder’s Open With option invariably resulted in the warning shown below when the quarantine flag was 8, but the file opened without any warning when the flag was c.
  • Regardless of default app or quarantine flag, Preview opened the PDF without any warning when that was performed using its Open menu command.

Log entries

With a reproducible model available, two refusals by Preview were captured in log excerpts. One of those is analysed in detail in the Appendix. It demonstrates that LaunchServices recognised that the PDF document to be opened was in quarantine, which resulted in its checking by XProtect. However, the error reported was -67062, that the document hadn’t been validly signed, and that appears to have been the primary cause of refusal to open that file, and display of the dialog.

Given that Preview adds a com.apple.quarantine xattr to every PDF file it opens, and macOS has no feature to sign editable documents such as PDFs, this system appears set up to fail and block Preview from opening files.

Workarounds

If you try to open a PDF document in Preview and it refuses, use the Open command in the app to do so. Unfortunately, this won’t lead to its quarantine flag being cleared, enabling you to double-click that document successfully in the future. The only sure way to accomplish that is to edit the flag in the document’s com.apple.quarantine extended attribute using xattred. Unlike quarantined apps whose quarantine flags are cleared following Gatekeeper clearance, there doesn’t appear to be any simpler general way to clear the quarantine flag for a document. That is a surprising shortcoming.

What I haven’t considered here is another problem encountered in Preview, when a document has been modified, and the app refuses to save it. That’s best for another time.

Appendix: Log entries

To facilitate their inclusion here, angle brackets have been replaced by square brackets throughout. Times are given in arbitrary seconds elapsed. In this case, the file that been double-clicked was named 0PDFtest1accessdefault.pdf.

This starts with a double-click of the document to be opened
0.952801 Finder sendAction:

Some 0.03 seconds later, LaunchServices registers this as the opening of that PDF document, which it matches against the running app Preview
1.087768 com.apple.launchservices Opening document [FSNode 0xb44d90500] { isDir = n, path = [private] } with application [FSNode 0xb44d92ae0] { isDir = y, path = [private] }
1.117540 com.apple.launchservices LAUNCH: Launch of [FSNode 0xb44d92ae0] { isDir = y, path = [private] } matched already running application, 0x0-0x86086

As that document has a com.apple.quarantine xattr, it’s recognised as being in quarantine, and requires special handling
1.117541 com.apple.launchservices QUARANTINE: Setting risk category to LSRiskCategoryUnknown
1.123552 com.apple.launchservices QUARANTINE: Setting paths for LSQItemPathsAEodoc to [private]
1.123580 com.apple.launchservices QUARANTINE: Resolving all quarantine items, caller=669 items=[private] options=LSOpen2Options(preferRunning allowErrorUI userIntent )

That invokes an assessment by XProtect, initially against a short blacklist in XProtect.meta.plist
1.129612 com.apple.xprotect XPAssessment performAnalysisOnFileImpl continueOnError: 0 forcedRulesOnly: 0
1.129877 com.apple.xprotect Using meta-plist from: /var/protected/xprotect/XProtect.bundle/Contents/Resources/XProtect.meta.plist

Then a fuller security assessment is started
1.130742 com.apple.xprotect Calling SecAssessmentCreate with URL [private], context [private]
and just 0.001 seconds later comes the error that the file isn’t signed
1.140203 com.apple.securityd MacOS error: -67062
1.140257 com.apple.securityd temporarySigning type=3 matchFlags=0x0 path=/Users/hoakley/Documents/0PDFtest1accessdefault.pdf
1.140638 com.apple.securityd MacOS error: -67062

Those results are returned, but not revealed, and an XProtect malware scan is started, against its main Yara rules
1.141071 com.apple.xprotect SecAssessment results: [private] (null)
1.141076 com.apple.xprotect Starting malware scan for: [private]
1.141606 com.apple.xprotect Using XProtect rules location: /var/protected/xprotect/XProtect.bundle/Contents/Resources/XProtect.yara

That isn’t reported as being complete before the warning dialog is shown
1.237484 com.apple.AppKit (app) begin modal window ffffffff