Re: [LFS Trac] #5956: vim-9.2.0679 (Security Update) (was: vim-9.2.0671 (Security Update))

LFS Trac ([email protected] via lfs-book Mailing List) <[email protected]> Sat, 20 Jun 2026 19:13:20 -0000
Newsgroups gmane.linux.lfs.book
Message-ID <[email protected]>
#5956: vim-9.2.0679 (Security Update)
-------------------------+-----------------------
 Reporter:  Joe Locash   |       Owner:  lfs-book
     Type:  enhancement  |      Status:  new
 Priority:  normal       |   Milestone:  13.1
Component:  Book         |     Version:  git
 Severity:  normal       |  Resolution:
 Keywords:               |
-------------------------+-----------------------
Changes (by Joe Locash):

 * summary:  vim-9.2.0671 (Security Update) => vim-9.2.0679 (Security
              Update)

Comment:

 {{{
 Out-of-bounds Read with Text Properties in Vim >= 9.2.0320 && Vim <
 9.2.0679
 ============================================================================
 Date: 20.06.2026
 Severity: Medium
 CVE: *requested, not yet assigned*
 CWE: Out-of-bounds Read (CWE-125)

 ## Summary

 A crafted undo or swap file can store a virtual-text property whose offset
 and
 length point outside the line's property data. When Vim restores or
 displays
 such a line it converts the offset into a pointer and reads the virtual
 text
 without bounds checking, causing an out-of-bounds read that can crash Vim
 or
 disclose adjacent heap memory.

 This completes GHSA-f36c-2qcp-7gpw (patch 9.2.0670): that patch validated
 only
 the property *count*; the per-property virtual-text offset and length were
 still taken from the untrusted file unchecked.

 ## Details

 Since patch 9.2.0320, text properties are stored inline after a line:

 ```
 [text][NUL][prop_count (uint16)][textprop_T ...][virtual text ...]
 ```

 For a virtual-text property (`tp_id < 0`), `tp_text_offset` is the byte
 offset
 of its string relative to the `prop_count` position. On load the offset is
 turned into a pointer (`count_ptr + tp_text_offset`) and the string is
 later
 read as `tp_len + 1` bytes.

 `text_prop_count_valid()` (9.2.0670) only ensures the `textprop_T` array
 fits
 within the property data; it does not constrain `tp_text_offset` or
 `tp_len`. A
 file with `tp_id < 0` and an out-of-range offset therefore yields a wild
 pointer, and reading the virtual text reads out of bounds. The unchecked
 conversion is reachable when:

 - restoring a line from an undo/swap file, and
 - displaying or querying a line's properties (`get_text_props()`, used by
   screen drawing, `charset.c`, and `prop_list()`/`prop_find()`).

 ## Impact

 Out-of-bounds read leading to a crash (denial of service) and potentially
 disclosure of adjacent heap memory. Exploitation requires the victim to
 open a
 maliciously crafted undo or swap file, so attack complexity is high and
 user
 interaction is required. Severity: Medium.

 ## Patch

 Fixed by validating, for every virtual-text property, that
 `tp_text_offset` and
 `tp_len` lie within the available property data before the offset is
 converted
 to a pointer (`text_prop_vtext_valid()`), applied on both the undo/swap
 restore
 and the display path. Update to patch 9.2.0679.

 ## Workarounds

 Do not load undo files (`:rundo`) or recover swap files from untrusted
 sources.

 ## References

 The issue has been fixed as of Vim patch
 [v9.2.0679](https://github.com/vim/vim/releases/tag/v9.2.0679).
 -
 [Commit](https://github.com/vim/vim/commit/b3faeecc976d3031d7c0675623516ec60c30f949)
 - [Github Security
 Advisory](https://github.com/vim/vim/security/advisories/GHSA-ww8h-47xp-
 hp4w)
 - [GHSA-f36c-2qcp-7gpw](https://github.com/vim/vim/security/advisories
 /GHSA-f36c-2qcp-7gpw) - the count check this completes
 - Introduced in patch
 [v9.2.0320](https://github.com/vim/vim/releases/tag/v9.2.0320) (inline
 text-property storage format)
 }}}
-- 
Ticket URL: <https://wiki.linuxfromscratch.org/lfs/ticket/5956#comment:2>
LFS Trac <https://wiki.linuxfromscratch.org/lfs/>
Linux From Scratch: Your Distro, Your Rules.

-- 
http://lists.linuxfromscratch.org/sympa/info/lfs-book
Unsubscribe: See the above information page