|
Message-ID: <bb4f8cbe-d7d8-ba66-101c-f754f2e3d9cb@vulndisco.cc> Date: Mon, 3 Oct 2022 19:06:16 +0300 From: Evgeny Legerov <admin@...ndisco.cc> To: oss-security@...ts.openwall.com Subject: MySQL Cluster 8.0.30 overflow Hi, There is a heap overflow in ndbd. Bug details: void Dbdih::execSTART_MECONF(Signal* signal) { jamEntry(); StartMeConf * const startMe = (StartMeConf *)&signal->theData[0]; Uint32 nodeId = startMe->startingNodeId; [1] const Uint32 startWord = startMe->startWord; CRASH_INSERTION(7130); ndbrequire(nodeId == cownNodeId); bool v2_format = true; Uint32 cdata_size_in_words; [2] if (ndbd_send_node_bitmask_in_section(getNodeInfo(cmasterNodeId).m_version)) { jam(); ndbrequire(signal->getNoOfSections() == 1); SegmentedSectionPtr ptr; SectionHandle handle(this, signal); ndbrequire(handle.getSection(ptr, 0)); ndbrequire(ptr.sz <= (sizeof(cdata)/4)); copy(cdata, ptr); cdata_size_in_words = ptr.sz; releaseSections(handle); } else { jam(); v2_format = false; [3] arrGuard(startWord + StartMeConf::DATA_SIZE, sizeof(cdata)/4); for(Uint32 i = 0; i < StartMeConf::DATA_SIZE; i++) { [4] cdata[startWord+i] = startMe->data[i]; } } We control the contents of signal->theData buffer. If master node is an old 7.6 version, which is still supported, check on line #2 fails and we go to line #3. This check can be easily bypassed if startWord is negative. On line #4 we have nice heap overflow. Instructions and code to reproduce - https://github.com/ivd38/mysql_overflow1 regards, -e
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.