A flaw was found in GDB's STABS debug format parser. The readmemberfunctions() function in gdb/stabsread.c contains a linked list removal bug in the code that separates destructor and non-destructor member functions of C++ classes. The bug causes the destructor entries to remain in the main function list while the list length counter is decremented, resulting in an out-of-bounds write when the function list is copied to its final allocated array. An attacker can craft an ELF binary with malicious .stab and .stabstr sections that triggers this out-of-bounds write when a user opens the file in GDB and performs any symbol-inspection operation such as setting a breakpoint. The inferior process does not need to be executed. Under controlled conditions, this was demonstrated to achieve execution of arbitrary commands within the GDB process.
{
"binaries": [
{
"binary_version": "9.2-0ubuntu1~20.04.2",
"binary_name": "gdb"
},
{
"binary_version": "9.2-0ubuntu1~20.04.2",
"binary_name": "gdb-multiarch"
},
{
"binary_version": "9.2-0ubuntu1~20.04.2",
"binary_name": "gdb-source"
},
{
"binary_version": "9.2-0ubuntu1~20.04.2",
"binary_name": "gdbserver"
}
]
}{
"binaries": [
{
"binary_version": "12.1-0ubuntu1~22.04.2",
"binary_name": "gdb"
},
{
"binary_version": "12.1-0ubuntu1~22.04.2",
"binary_name": "gdb-multiarch"
},
{
"binary_version": "12.1-0ubuntu1~22.04.2",
"binary_name": "gdb-source"
},
{
"binary_version": "12.1-0ubuntu1~22.04.2",
"binary_name": "gdbserver"
}
]
}{
"binaries": [
{
"binary_version": "15.1-1ubuntu1~24.04.1",
"binary_name": "gdb"
},
{
"binary_version": "15.1-1ubuntu1~24.04.1",
"binary_name": "gdb-multiarch"
},
{
"binary_version": "15.1-1ubuntu1~24.04.1",
"binary_name": "gdb-source"
},
{
"binary_version": "15.1-1ubuntu1~24.04.1",
"binary_name": "gdbserver"
}
]
}{
"binaries": [
{
"binary_version": "17.1-2ubuntu1",
"binary_name": "gdb"
},
{
"binary_version": "17.1-2ubuntu1",
"binary_name": "gdb-minimal"
},
{
"binary_version": "17.1-2ubuntu1",
"binary_name": "gdb-multiarch"
},
{
"binary_version": "17.1-2ubuntu1",
"binary_name": "gdb-source"
},
{
"binary_version": "17.1-2ubuntu1",
"binary_name": "gdbserver"
}
]
}{
"binaries": [
{
"binary_version": "7.11.1-0ubuntu1~16.5+esm1",
"binary_name": "gdb"
},
{
"binary_version": "7.11.1-0ubuntu1~16.5+esm1",
"binary_name": "gdb-multiarch"
},
{
"binary_version": "7.11.1-0ubuntu1~16.5+esm1",
"binary_name": "gdb-source"
},
{
"binary_version": "7.11.1-0ubuntu1~16.5+esm1",
"binary_name": "gdb64"
},
{
"binary_version": "7.11.1-0ubuntu1~16.5+esm1",
"binary_name": "gdbserver"
}
]
}{
"binaries": [
{
"binary_version": "8.1.1-0ubuntu1+esm1",
"binary_name": "gdb"
},
{
"binary_version": "8.1.1-0ubuntu1+esm1",
"binary_name": "gdb-multiarch"
},
{
"binary_version": "8.1.1-0ubuntu1+esm1",
"binary_name": "gdb-source"
},
{
"binary_version": "8.1.1-0ubuntu1+esm1",
"binary_name": "gdbserver"
}
]
}