mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-10-15 06:17:16 +00:00
sngrep: patch CVE-2026-90558
Details: https://nvd.nist.gov/vuln/detail/cve-2026-90558 Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com> Signed-off-by: Anuj Mittal <anuj.mittal@oss.qualcomm.com>
This commit is contained in:
1 parent
b23291be83
commit
36ddee53b1
2 files changed
+87
-1
No files matched your search
@@ -0,0 +1,84 @@
|
||||
From 399346a12ca3bcf7703734fa33b5b3427775b014 Mon Sep 17 00:00:00 2001
|
||||
From: Kaian <kaian@irontec.com>
|
||||
Date: Fri, 7 Aug 2026 08:45:42 +0200
|
||||
Subject: [PATCH] fix: prevent stack buffer overflow in SIP attribute
|
||||
formatting
|
||||
|
||||
call_get_attribute() formatted the Call-ID, X-Call-ID and Reason header
|
||||
text with an unbounded sprintf("%s"). Call-ID/X-Call-ID can hold up to
|
||||
MAX_CALLID_SIZE/MAX_XCALLID_SIZE (1023 bytes) and Reason text is copied
|
||||
from the raw payload (up to MAX_SIP_PAYLOAD), while all callers pass a
|
||||
255-byte SIP_ATTR_MAXLEN stack buffer (call list rendering, sort compare).
|
||||
A SIP message with a long Call-ID, X-Call-ID or Reason header overflowed
|
||||
the stack, triggerable via pcap, live capture or HEP/EEP remote capture.
|
||||
|
||||
Bound these writes with "%.*s" and SIP_ATTR_MAXLEN - 1. Also fix a
|
||||
matching off-by-one in msg_get_attribute(), where the existing "%.*s"
|
||||
used SIP_ATTR_MAXLEN as the precision and could write 256 bytes
|
||||
(255 chars + NUL) into the 255-byte buffer.
|
||||
|
||||
Thanks to TristanInSec for reporting the issue.
|
||||
|
||||
(cherry picked from commit 1ff74ee3ab5ff280e8ba976aa8c744dca57eb35b)
|
||||
|
||||
CVE: CVE-2026-90558
|
||||
Upstream-Status: Backport [https://github.com/irontec/sngrep/commit/1ff74ee3ab5ff280e8ba976aa8c744dca57eb35b]
|
||||
|
||||
SIP contract change was dropped during backport as it was introduced in
|
||||
v1.8.4[1]
|
||||
|
||||
[1]https://github.com/irontec/sngrep/commit/c61a26d90c166f996e31aceefc9c2f8f831ccd86
|
||||
|
||||
Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
|
||||
---
|
||||
src/sip_call.c | 6 +++---
|
||||
src/sip_msg.c | 6 +++---
|
||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/sip_call.c b/src/sip_call.c
|
||||
index bea879a..68ecb50 100644
|
||||
--- a/src/sip_call.c
|
||||
+++ b/src/sip_call.c
|
||||
@@ -257,10 +257,10 @@ call_get_attribute(sip_call_t *call, enum sip_attr_id id, char *value)
|
||||
sprintf(value, "%d", call->index);
|
||||
break;
|
||||
case SIP_ATTR_CALLID:
|
||||
- sprintf(value, "%s", call->callid);
|
||||
+ sprintf(value, "%.*s", SIP_ATTR_MAXLEN - 1, call->callid);
|
||||
break;
|
||||
case SIP_ATTR_XCALLID:
|
||||
- sprintf(value, "%s", call->xcallid);
|
||||
+ sprintf(value, "%.*s", SIP_ATTR_MAXLEN - 1, call->xcallid);
|
||||
break;
|
||||
case SIP_ATTR_MSGCNT:
|
||||
sprintf(value, "%d", vector_count(call->msgs));
|
||||
@@ -282,7 +282,7 @@ call_get_attribute(sip_call_t *call, enum sip_attr_id id, char *value)
|
||||
break;
|
||||
case SIP_ATTR_REASON_TXT:
|
||||
if (call->reasontxt)
|
||||
- sprintf(value, "%s", call->reasontxt);
|
||||
+ sprintf(value, "%.*s", SIP_ATTR_MAXLEN - 1, call->reasontxt);
|
||||
break;
|
||||
case SIP_ATTR_WARNING:
|
||||
if (call->warning)
|
||||
diff --git a/src/sip_msg.c b/src/sip_msg.c
|
||||
index 379a40a..6762862 100644
|
||||
--- a/src/sip_msg.c
|
||||
+++ b/src/sip_msg.c
|
||||
@@ -136,13 +136,13 @@ msg_get_attribute(sip_msg_t *msg, int id, char *value)
|
||||
}
|
||||
break;
|
||||
case SIP_ATTR_METHOD:
|
||||
- sprintf(value, "%.*s", SIP_ATTR_MAXLEN, sip_get_msg_reqresp_str(msg));
|
||||
+ sprintf(value, "%.*s", SIP_ATTR_MAXLEN - 1, sip_get_msg_reqresp_str(msg));
|
||||
break;
|
||||
case SIP_ATTR_SIPFROM:
|
||||
- sprintf(value, "%.*s", SIP_ATTR_MAXLEN, msg->sip_from);
|
||||
+ sprintf(value, "%.*s", SIP_ATTR_MAXLEN - 1, msg->sip_from);
|
||||
break;
|
||||
case SIP_ATTR_SIPTO:
|
||||
- sprintf(value, "%.*s", SIP_ATTR_MAXLEN, msg->sip_to);
|
||||
+ sprintf(value, "%.*s", SIP_ATTR_MAXLEN - 1, msg->sip_to);
|
||||
break;
|
||||
case SIP_ATTR_SIPFROMUSER:
|
||||
if (msg->sip_from && (ar = strchr(msg->sip_from, '@'))) {
|
||||
@@ -15,7 +15,9 @@ DEPENDS = "\
|
||||
ncurses \
|
||||
"
|
||||
|
||||
SRC_URI = "git://github.com/irontec/sngrep.git;protocol=https;branch=master"
|
||||
SRC_URI = "git://github.com/irontec/sngrep.git;protocol=https;branch=master \
|
||||
file://CVE-2026-90558.patch \
|
||||
"
|
||||
SRCREV = "dad1033640f249fa4994f976cf6ee96826c15702"
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user