Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected], [email protected]
Control: affects -1 + src:direwolf
User: [email protected]
Usertags: pu

Hello!

Please allow direwolf/1.7+dfsg-2+deb13u1 to be uploaded.

[ Reason ]
This version of Direwolf has one CVE filed against it currently,
CVE-2025-34457.

Due to the relatively niche nature of the software, this is not worthy of a DSA
but fixing it is desirable nonetheless.

[ Impact ]

Users are currently vulnerable to a DOS through this software.

[ Tests ]
On my Trixie workstation, the package has shown no regressions with this patch.

[ Risks ]

I don't expect anything to break, the code changes are minor and only truncate
incoming data to lengths defined in specification. Valid communication is
unaffected

[ Checklist ]
  [X] *all* changes are documented in the d/changelog
  [X] I reviewed all changes and I approve them
  [X] attach debdiff against the package in stable
  [X] the issue is verified as fixed in unstable

[ Changes ]
The commit containing specific changes from upstream has been backported to
unstable as 1.8.1+dfsg-2 and this stable release.

[ Other info ]
As this is my first stable update, I have not uploaded to stable yet. Lintian
shows it as NMU as I have used my debian.org email which was not in the stable
upload.
diff -Nru direwolf-1.7+dfsg/debian/changelog direwolf-1.7+dfsg/debian/changelog
--- direwolf-1.7+dfsg/debian/changelog  2023-11-23 15:19:26.000000000 +0000
+++ direwolf-1.7+dfsg/debian/changelog  2025-12-29 15:58:09.000000000 +0000
@@ -1,3 +1,10 @@
+direwolf (1.7+dfsg-2+deb13u1) trixie; urgency=medium
+
+  * Backport patch 0004-Resolve-CVE-2025-34457.patch from unstable
+    - Fixes CVE-2025-34457 KISS Stack Buffer Overflow
+
+ -- Dave Hibberd <[email protected]>  Mon, 29 Dec 2025 15:58:09 +0000
+
 direwolf (1.7+dfsg-2) unstable; urgency=medium
 
   * Move 99-direwolf-cmedia.rules to /usr/lib/udev/rules.d/.
diff -Nru direwolf-1.7+dfsg/debian/patches/0004-Resolve-CVE-2025-34457.patch 
direwolf-1.7+dfsg/debian/patches/0004-Resolve-CVE-2025-34457.patch
--- direwolf-1.7+dfsg/debian/patches/0004-Resolve-CVE-2025-34457.patch  
1970-01-01 01:00:00.000000000 +0100
+++ direwolf-1.7+dfsg/debian/patches/0004-Resolve-CVE-2025-34457.patch  
2025-12-29 15:51:46.000000000 +0000
@@ -0,0 +1,74 @@
+From: Dave Hibberd <[email protected]>
+Date: Wed, 24 Dec 2025 17:33:03 +0000
+Subject: Resolve CVE-2025-34457
+
+---
+
+diff --git a/src/kiss_frame.c b/src/kiss_frame.c
+index 65a0942..d644ff2 100644
+--- a/src/kiss_frame.c
++++ b/src/kiss_frame.c
+@@ -251,10 +251,12 @@ int kiss_encapsulate (unsigned char *in, int ilen, 
unsigned char *out)
+  *
+  * Inputs:    out     - Where to put the resulting frame without
+  *                      the escapes or FEND.
++ *                      Storage must be at least as long as input.
++ *                      Output can never be longer than input.
+  *                      First byte is the "type indicator" with type and 
+  *                      channel but we don't care about that here.
+  *                      We treat it like any other byte with special handling
+- *                      if it happens to be FESC.
++ *                      if it happens to be one of the escaped characters.
+  *                      Note that this is "binary" data and can contain
+  *                      nul (0x00) values.   Don't treat it like a text 
string!
+  *
+@@ -280,7 +282,7 @@ int kiss_unwrap (unsigned char *in, int ilen, unsigned 
char *out)
+       }
+ 
+       if (in[ilen-1] == FEND) {
+-        ilen--;       /* Don't try to process below. */
++        ilen--;       /* Remove FEND from he end. */
+       }
+       else {
+         text_color_set(DW_COLOR_ERROR);
+@@ -342,6 +344,8 @@ int kiss_unwrap (unsigned char *in, int ilen, unsigned 
char *out)
+  *
+  * Inputs:    kf      - Current state of building a frame.
+  *            ch      - A byte from the input stream.
++ *                      Note that it can be any value 0-255.
++ *                      This is binary data, not a nul terminated string.
+  *            debug   - Activates debug output.
+  *            kps     - KISS TCP port status block.
+  *                      NULL for pseudo terminal and serial port.
+@@ -442,8 +446,9 @@ void kiss_rec_byte (kiss_frame_t *kf, unsigned char ch, 
int debug,
+ 
+      
+           if (ch == FEND) {
+-            
+-            unsigned char unwrapped[AX25_MAX_PACKET_LEN];
++            // Unwrapped result can't be longer than received encoded KISS.
++            //  kf->kiss_msg is MAX_KISS_LEN so that is enough for here.    
++            unsigned char unwrapped[MAX_KISS_LEN];
+             int ulen;
+ 
+             /* End of frame. */
+@@ -482,12 +487,17 @@ void kiss_rec_byte (kiss_frame_t *kf, unsigned char ch, 
int debug,
+             return;
+           }
+ 
+-          if (kf->kiss_len < MAX_KISS_LEN) {
++          // Issue 617.
++          // In the KS_COLLECTING state, non-FEND bytes were being collected 
up until
++          // the MAX_KISS_LEN limit, leaving no room for appending the final 
FEND byte
++          // at the end. By reducing the collection limit by one, there is 
room for
++          // that final byte. 
++          if (kf->kiss_len < MAX_KISS_LEN - 1) {
+             kf->kiss_msg[kf->kiss_len++] = ch;
+           }
+           else {          
+             text_color_set(DW_COLOR_ERROR);
+-            dw_printf ("KISS message exceeded maximum length.\n");
++            dw_printf ("KISS message exceeded maximum length.  Discarding 
excess.\n");
+           }         
+           return;
+           break;
diff -Nru direwolf-1.7+dfsg/debian/patches/series 
direwolf-1.7+dfsg/debian/patches/series
--- direwolf-1.7+dfsg/debian/patches/series     2023-11-23 13:53:33.000000000 
+0000
+++ direwolf-1.7+dfsg/debian/patches/series     2025-12-29 15:35:24.000000000 
+0000
@@ -2,3 +2,4 @@
 no-install-pdf
 desktop-main-category
 lib-udev-rules
+0004-Resolve-CVE-2025-34457.patch
diff -Nru direwolf-1.7+dfsg/debian/changelog direwolf-1.7+dfsg/debian/changelog
--- direwolf-1.7+dfsg/debian/changelog  2023-11-23 15:19:26.000000000 +0000
+++ direwolf-1.7+dfsg/debian/changelog  2025-12-29 15:58:09.000000000 +0000
@@ -1,3 +1,10 @@
+direwolf (1.7+dfsg-2+deb13u1) trixie; urgency=medium
+
+  * Backport patch 0004-Resolve-CVE-2025-34457.patch from unstable
+    - Fixes CVE-2025-34457 KISS Stack Buffer Overflow
+
+ -- Dave Hibberd <[email protected]>  Mon, 29 Dec 2025 15:58:09 +0000
+
 direwolf (1.7+dfsg-2) unstable; urgency=medium
 
   * Move 99-direwolf-cmedia.rules to /usr/lib/udev/rules.d/.
diff -Nru direwolf-1.7+dfsg/debian/patches/0004-Resolve-CVE-2025-34457.patch 
direwolf-1.7+dfsg/debian/patches/0004-Resolve-CVE-2025-34457.patch
--- direwolf-1.7+dfsg/debian/patches/0004-Resolve-CVE-2025-34457.patch  
1970-01-01 01:00:00.000000000 +0100
+++ direwolf-1.7+dfsg/debian/patches/0004-Resolve-CVE-2025-34457.patch  
2025-12-29 15:51:46.000000000 +0000
@@ -0,0 +1,74 @@
+From: Dave Hibberd <[email protected]>
+Date: Wed, 24 Dec 2025 17:33:03 +0000
+Subject: Resolve CVE-2025-34457
+
+---
+
+diff --git a/src/kiss_frame.c b/src/kiss_frame.c
+index 65a0942..d644ff2 100644
+--- a/src/kiss_frame.c
++++ b/src/kiss_frame.c
+@@ -251,10 +251,12 @@ int kiss_encapsulate (unsigned char *in, int ilen, 
unsigned char *out)
+  *
+  * Inputs:    out     - Where to put the resulting frame without
+  *                      the escapes or FEND.
++ *                      Storage must be at least as long as input.
++ *                      Output can never be longer than input.
+  *                      First byte is the "type indicator" with type and 
+  *                      channel but we don't care about that here.
+  *                      We treat it like any other byte with special handling
+- *                      if it happens to be FESC.
++ *                      if it happens to be one of the escaped characters.
+  *                      Note that this is "binary" data and can contain
+  *                      nul (0x00) values.   Don't treat it like a text 
string!
+  *
+@@ -280,7 +282,7 @@ int kiss_unwrap (unsigned char *in, int ilen, unsigned 
char *out)
+       }
+ 
+       if (in[ilen-1] == FEND) {
+-        ilen--;       /* Don't try to process below. */
++        ilen--;       /* Remove FEND from he end. */
+       }
+       else {
+         text_color_set(DW_COLOR_ERROR);
+@@ -342,6 +344,8 @@ int kiss_unwrap (unsigned char *in, int ilen, unsigned 
char *out)
+  *
+  * Inputs:    kf      - Current state of building a frame.
+  *            ch      - A byte from the input stream.
++ *                      Note that it can be any value 0-255.
++ *                      This is binary data, not a nul terminated string.
+  *            debug   - Activates debug output.
+  *            kps     - KISS TCP port status block.
+  *                      NULL for pseudo terminal and serial port.
+@@ -442,8 +446,9 @@ void kiss_rec_byte (kiss_frame_t *kf, unsigned char ch, 
int debug,
+ 
+      
+           if (ch == FEND) {
+-            
+-            unsigned char unwrapped[AX25_MAX_PACKET_LEN];
++            // Unwrapped result can't be longer than received encoded KISS.
++            //  kf->kiss_msg is MAX_KISS_LEN so that is enough for here.    
++            unsigned char unwrapped[MAX_KISS_LEN];
+             int ulen;
+ 
+             /* End of frame. */
+@@ -482,12 +487,17 @@ void kiss_rec_byte (kiss_frame_t *kf, unsigned char ch, 
int debug,
+             return;
+           }
+ 
+-          if (kf->kiss_len < MAX_KISS_LEN) {
++          // Issue 617.
++          // In the KS_COLLECTING state, non-FEND bytes were being collected 
up until
++          // the MAX_KISS_LEN limit, leaving no room for appending the final 
FEND byte
++          // at the end. By reducing the collection limit by one, there is 
room for
++          // that final byte. 
++          if (kf->kiss_len < MAX_KISS_LEN - 1) {
+             kf->kiss_msg[kf->kiss_len++] = ch;
+           }
+           else {          
+             text_color_set(DW_COLOR_ERROR);
+-            dw_printf ("KISS message exceeded maximum length.\n");
++            dw_printf ("KISS message exceeded maximum length.  Discarding 
excess.\n");
+           }         
+           return;
+           break;
diff -Nru direwolf-1.7+dfsg/debian/patches/series 
direwolf-1.7+dfsg/debian/patches/series
--- direwolf-1.7+dfsg/debian/patches/series     2023-11-23 13:53:33.000000000 
+0000
+++ direwolf-1.7+dfsg/debian/patches/series     2025-12-29 15:35:24.000000000 
+0000
@@ -2,3 +2,4 @@
 no-install-pdf
 desktop-main-category
 lib-udev-rules
+0004-Resolve-CVE-2025-34457.patch

Reply via email to