Follow @Openwall on Twitter for new release announcements and other news
[<prev] [<thread-prev] [day] [month] [year] [list]
Message-ID: <0009d6cc-143e-41e6-b240-eb526a9cb306@gmail.com>
Date: Sun, 28 Dec 2025 00:47:30 -0600
From: Jacob Bachmeyer <jcb62281@...il.com>
To: oss-security@...ts.openwall.com, Solar Designer <solar@...nwall.com>
Cc: contact@....fail
Subject: Re: Many vulnerabilities in GnuPG

On 12/27/25 22:27, Solar Designer wrote:
> On Sat, Dec 27, 2025 at 07:29:53PM -0500, Demi Marie Obenour wrote:
>> https://gpg.fail lists many vulnerabilities in GnuPG, one of which
>> allows remote code execution.  All are zero-days to the best of
>> my knowledge.
> Thanks.  I wish this were brought in here by the researchers, but since
> it was not and since we require actual content here (not just links),
> let me take care of this now.  The website has it nicely formatted, so I
> also include the HTML versions, which brings the message to just below
> the maximum of 1 MiB here.  Who knows how long this website will stay
> up, but oss-security archives will probably exist decades later.
>
> The website currently says:
>
>>                           Slides, pocs and patches soon!
>>
>>     "in the hurry of leaving i forgot the sites src at home, sorry, had to
>>     rewrite the whole thing. expect a nicer site by tomorrow. im patching as
>>     we speak."
>>     - crackticker (<- to blame)
>>
>>      1. Multiple Plaintext Attack on Detached PGP Signatures in GnuPG
>>      2. GnuPG Accepts Path Separators and Path Traversals in Literal Data
>>         "Filename" Field
>>      3. Cleartext Signature Plaintext Truncated for Hash Calculation
>>      4. Encrypted message malleability checks are incorrectly enforced causing
>>         plaintext recovery attacks
>>      5. Memory Corruption in ASCII-Armor Parsing
>>      6. Trusted comment injection (minisign)
>>      7. Cleartext Signature Forgery in the NotDashEscaped header
>>         implementation in GnuPG
>>      8. OpenPGP Cleartext Signature Framework Susceptible to Format Confusion
>>      9. GnuPG Output Fails To Distinguish Signature Verification Success From
>>         Message Content
>>     10. Cleartext Signature Forgery in GnuPG
>>     11. Radix64 Line-Truncation Enabling Polyglot Attacks
>>     12. GnuPG may downgrade digest algorithm to SHA1 during key signature
>>         checking
>>     13. GnuPG Trust Packet Parsing Enables Adding Arbitrary Subkeys
>>     14. Trusted comment Injection (minisign)
> Each of the above 14 vulnerabilities has its own web page.  I attach 14
> text (converted with ELinks at width 80) and 14 HTML files corresponding
> to them.

These are definitely edge cases and I think that item 9 is actually old 
news.

Comments on a first reading:

Overall, I have one very major point of disagreement here:  the OpenPGP 
clearsign format is useful precisely because it enables the signed 
message to be easily viewed with other tools, thus complicating attacks 
and making large-scale attacks much more likely to be detected.  (It 
only takes one user who looks at a clearsigned digest list with less(1) 
and sees a bunch of control sequences to raise an alarm.)


Item 1: Multiple Plaintext Attack on Detached PGP Signatures in GnuPG

Exploitation requires a very odd use of signatures.  Bob knows that he 
has a detached signature, and ordinarily a detached signature is simply 
used to verify the signed file, after which the signed file is used 
directly.

This is also the first time I have seen --decrypt suggested for reading 
a signed message; does this also work if the message is encrypted?

Mallory can be assumed to have Bob's public key and could therefore 
generate a second encrypted message to Bob if Alice's message was signed 
and encrypted.  There would be an interesting indicator of compromise:  
an abnormally-large detached signature.

This exposes *another* bug in GPG:  documentation says that --decrypt 
will reject an unencrypted input, yet the PoC involves using it with 
exactly that.


Item 2:  GnuPG Accepts Path Separators and Path Traversals in Literal 
Data "Filename" Field

While this is a potentially serious bug, as it enables an attacker to 
potentially overwrite any file if the attacker can guess the file name, 
it also relies more on a social-engineering attack. While a naive user 
might use the suggested command, a more-experienced user should 
immediately smell a rat.

The PoC uses ANSI escapes to cover up (erase, move left) the hash mark 
that makes the fake message viable as a shell script, the actual payload 
command (set as invisible text), and the prompt from GPG about writing 
the output file (which appears to be sent to the window title). I am 
uncertain how the user is supposed to see the next prompt, as the 
invisible text mode does not appear to be reset.


Item 3: Cleartext Signature Plaintext Truncated for Hash Calculation

GPG uses in-band signaling if a line is too long. Comments in the GPG 
sources acknowledge that this is a hack.

The exploit does have a problem in that it reports an error about 
"invalid armor" due to a line being too long. Also, while it works if 
the message is fed directly to a terminal, I suspect that reading the 
message with less(1) would show interesting anomalies.

Item 4: Encrypted message malleability checks are incorrectly enforced 
causing plaintext recovery attacks

This item admits not actually having a complete attack, and I am unsure 
how exactly this leads to recovering plaintext, even if Bob cooperates. 
(User willingness to sign a random key received by email without 
verifying it breaks Web-of-Trust badly.)

If there is a bug here, it seems to be an out-of-bounds read in GPG's 
Inflate implementation: the decrypted ciphertext is in the memory buffer 
prior to the altered packets and thus prior to the beginning of the 
compressed stream.

I am unsure how the garbled comment packet is produced, unless it is the 
result of interpreting the decrypted data as a compressed stream and 
"inflating" it.

Item 5: Memory Corruption in ASCII-Armor Parsing

This is a serious memory-safety error in GPG.

Item 6: Trusted comment injection (minisign)

This is really a terminal-manipulation trick: the fake trusted comment 
must be longer in order to fully obscure the original text after the 
inserted CR moves the cursor back to the left edge. Again, using almost 
anything other than cat(1) to read the file will either show the 
chicanery or at least raise the proverbial eyebrow.

Item 7: Cleartext Signature Forgery in the NotDashEscaped header 
implementation in GnuPG

This is a misfeature that probably should not have been implemented, or 
should have been implemented much more strictly.

Item 8: OpenPGP Cleartext Signature Framework Susceptible to Format 
Confusion

Another logical solution to this issue would be to recognize when 
processing something that looks like a clearsigned message and reject a 
one-pass signature if a clearsigned message header has been seen.

Item 9: GnuPG Output Fails To Distinguish Signature Verification Success 
>From Message Content

I think this is actually an old problem, previously affecting 
Thunderbird and Git IIRC, and the existing --status-fd mechanism in GPG 
is meant for exactly this case, at least for automated processing.

Item 10: Cleartext Signature Forgery in GnuPG

This is simply an implementation defect in GPG and should be fixed by 
improving the validation of the "Hash" header.

Item 11: Radix64 Line-Truncation Enabling Polyglot Attacks

This is another implementation defect in GPG, although fixing it may be 
more involved: the radix64 reader should be refactored to work by 
characters (or arbitrary blocks) instead of by lines.

In fact, arbitrary limits are generally contrary to the GNU Coding 
Standards, so this really should be fixed... :-)

Item 12: GnuPG may downgrade digest algorithm to SHA1 during key 
signature checking

The root of this is another out-of-bounds read. There is a simple fix to 
this: always, *always*, *ALWAYS* initialize stack-resident local variables.

I am also unsure about the actual insecurity of SHA1 in general. Have 
there been more attacks since the first actual collision?

Item 13: GnuPG Trust Packet Parsing Enables Adding Arbitrary Subkeys

Keyrings are trusted stores, so this is more of a documentation problem.

The report is right that caching signature checks is probably a bad 
idea, although it may have been justifiable in the past due to limited 
computing power.

Item 14: Trusted comment Injection (minisign)

This is closely related to item 6, except that this time minisign itself 
outputs the sequences that manipulate the terminal.


-- Jacob

Powered by blists - more mailing lists

Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.