CVE-2026-33545
MobSF has SQL Injection in its SQLite Database Viewer Utils
MobSF is a mobile application security testing tool used. Prior to version 4.4.6, MobSF's read_sqlite() function in mobsf/MobSF/utils.py (lines 542-566) uses Python string formatting (%) to construct SQL queries with table names read from a SQLite database's sqlite_master table. When a security analyst uses MobSF to analyze a malicious mobile application containing a crafted SQLite database, attacker-controlled table names are interpolated directly into SQL queries without parameterization or escaping. This allows an attacker to cause denial of service and achieve SQL injection. Version 4.4.6 patches the issue.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- Required
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
5.3
MobSF has SQL Injection in its SQLite Database Viewer Utils
MobSF is a mobile application security testing tool used. Prior to version 4.4.6, MobSF's read_sqlite() function in mobsf/MobSF/utils.py (lines 542-566) uses Python string formatting (%) to construct SQL queries with table names read from a SQLite database's sqlite_master table. When a security analyst uses MobSF to analyze a malicious mobile application containing a crafted SQLite database, attacker-controlled table names are interpolated directly into SQL queries without parameterization or escaping. This allows an attacker to cause denial of service and achieve SQL injection. Version 4.4.6 patches the issue.
- Record
CVE-2026-33545- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
EUVDEUVD-2026-16399
5.3
MobSF is a mobile application security testing tool used. Prior to version 4.4.6, MobSF's read_sqlite() function in mobsf/MobSF/utils.py (lines 542-566) uses Python string formatting (%) to construct SQL queries with table names read from a SQLite database's sqlite_master table. When a security analyst uses MobSF to analyze a malicious mobile application containing a crafted SQLite database, attacker-controlled table names are interpolated directly into SQL queries without parameterization or escaping. This allows an attacker to cause denial of service and achieve SQL injection. Version 4.4.6 patches the issue.
- Record
EUVD-2026-16399- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-hqjr-43r5-9q58
5.3
MobSF has SQL Injection in its SQLite Database Viewer Utils
Description
MobSF's read_sqlite() function in mobsf/MobSF/utils.py (lines 542-566) uses Python string formatting (%) to construct SQL queries with table names read from a SQLite database's sqlite_master table. When a security analyst uses MobSF to analyze a malicious mobile application containing a crafted SQLite database, attacker-controlled table names are interpolated directly into SQL queries without parameterization or escaping.
This allows an attacker to:
-
Cause Denial of Service -- A malicious table name causes the database viewer to crash, preventing the analyst from viewing ANY data in the SQLite database. A malicious app can use this to hide sensitive data (C2 server URLs, stolen credentials, API keys) from MobSF's analysis.
-
Achieve SQL Injection -- The
SELECT * FROMquery on line 557 is provably injectable viaUNION SELECT, allowing attacker-controlled data to be returned in query results. The current code structure (aPRAGMAstatement that runs first on line 553) limits the full exploitation chain, but the underlying code is verifiably injectable.
Root Cause
The vulnerable code in mobsf/MobSF/utils.py:542-566:
def read_sqlite(sqlite_file):
"""Sqlite Dump - Readable Text."""
table_dict = {}
try:
con = sqlite3.connect(sqlite_file)
cur = con.cursor()
cur.execute('SELECT name FROM sqlite_master WHERE type=\'table\';')
tables = cur.fetchall()
for table in tables:
table_dict[table[0]] = {'head': [], 'data': []}
cur.execute('PRAGMA table_info(\'%s\')' % table) # <-- INJECTION POINT 1
rows = cur.fetchall()
for sq_row in rows:
table_dict[table[0]]['head'].append(sq_row[1])
cur.execute('SELECT * FROM \'%s\'' % table) # <-- INJECTION POINT 2
rows = cur.fetchall()
for sq_row in rows:
tmp_row = []
for each_row in sq_row:
tmp_row.append(str(each_row))
table_dict[table[0]]['data'].append(tmp_row)
except Exception:
logger.exception('Reading SQLite db')
return table_dict
Lines 553 and 557 use % string formatting to interpolate table (a tuple from sqlite_master) directly into SQL strings. The table value is attacker-controlled when the SQLite database originates from a malicious application being analyzed.
Attack Vector
The read_sqlite() function is called from two locations:
-
Dynamic Analysis File Viewer (
mobsf/DynamicAnalyzer/views/common/device.py:64):- Triggered when an analyst clicks to view a
.dbfile in device data - Applies to both Android and iOS dynamic analysis
- Triggered when an analyst clicks to view a
-
iOS Static Analysis File Viewer (
mobsf/StaticAnalyzer/views/ios/views/view_source.py:123):- Triggered when an analyst clicks to view a
.dbfile during iOS static analysis
- Triggered when an analyst clicks to view a
Attack Scenario
- Attacker creates a malicious Android APK (or iOS IPA) containing a SQLite database with a crafted table name in the
assets/directory - The SQLite database contains a table created with:
CREATE TABLE "x' UNION SELECT 'SQL_INJECTION_PROOF'--" (id INTEGER); - Security analyst uploads the application to MobSF for analysis
- Analyst browses the extracted files and clicks to view the SQLite database
- MobSF's
read_sqlite()reads table names fromsqlite_master, including the malicious namex' UNION SELECT 'SQL_INJECTION_PROOF'-- - The table name is interpolated into SQL queries via string formatting:
PRAGMA table_info('x' UNION SELECT 'SQL_INJECTION_PROOF'--')-- causes syntax error (DoS)SELECT * FROM 'x' UNION SELECT 'SQL_INJECTION_PROOF'--'-- SQL injection (UNION SELECT returns attacker data)
Impact
Denial of Service (Confirmed)
When the malicious table name is the first table in sqlite_master (i.e., created first in the database), the PRAGMA statement on line 553…
- Record
GHSA-hqjr-43r5-9q58- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
NVD
5.3
MobSF is a mobile application security testing tool used. Prior to version 4.4.6, MobSF's read_sqlite() function in mobsf/MobSF/utils.py (lines 542-566) uses Python string formatting (%) to construct SQL queries with table names read from a SQLite database's sqlite_master table. When a security analyst uses MobSF to analyze a malicious mobile application containing a crafted SQLite database, attacker-controlled table names are interpolated directly into SQL queries without parameterization or escaping. This allows an attacker to cause denial of service and achieve SQL injection. Version 4.4.6 patches the issue.
- Record
CVE-2026-33545- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H - CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
OSV
5.3
MobSF has SQL Injection in its SQLite Database Viewer Utils
MobSF is a mobile application security testing tool used. Prior to version 4.4.6, MobSF's read_sqlite() function in mobsf/MobSF/utils.py (lines 542-566) uses Python string formatting (%) to construct SQL queries with table names read from a SQLite database's sqlite_master table. When a security analyst uses MobSF to analyze a malicious mobile application containing a crafted SQLite database, attacker-controlled table names are interpolated directly into SQL queries without parameterization or escaping. This allows an attacker to cause denial of service and achieve SQL injection. Version 4.4.6 patches the issue.
- Record
CVE-2026-33545- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
OSVGHSA-hqjr-43r5-9q58
5.3
MobSF has SQL Injection in its SQLite Database Viewer Utils
Description
MobSF's read_sqlite() function in mobsf/MobSF/utils.py (lines 542-566) uses Python string formatting (%) to construct SQL queries with table names read from a SQLite database's sqlite_master table. When a security analyst uses MobSF to analyze a malicious mobile application containing a crafted SQLite database, attacker-controlled table names are interpolated directly into SQL queries without parameterization or escaping.
This allows an attacker to:
-
Cause Denial of Service -- A malicious table name causes the database viewer to crash, preventing the analyst from viewing ANY data in the SQLite database. A malicious app can use this to hide sensitive data (C2 server URLs, stolen credentials, API keys) from MobSF's analysis.
-
Achieve SQL Injection -- The
SELECT * FROMquery on line 557 is provably injectable viaUNION SELECT, allowing attacker-controlled data to be returned in query results. The current code structure (aPRAGMAstatement that runs first on line 553) limits the full exploitation chain, but the underlying code is verifiably injectable.
Root Cause
The vulnerable code in mobsf/MobSF/utils.py:542-566:
def read_sqlite(sqlite_file):
"""Sqlite Dump - Readable Text."""
table_dict = {}
try:
con = sqlite3.connect(sqlite_file)
cur = con.cursor()
cur.execute('SELECT name FROM sqlite_master WHERE type=\'table\';')
tables = cur.fetchall()
for table in tables:
table_dict[table[0]] = {'head': [], 'data': []}
cur.execute('PRAGMA table_info(\'%s\')' % table) # <-- INJECTION POINT 1
rows = cur.fetchall()
for sq_row in rows:
table_dict[table[0]]['head'].append(sq_row[1])
cur.execute('SELECT * FROM \'%s\'' % table) # <-- INJECTION POINT 2
rows = cur.fetchall()
for sq_row in rows:
tmp_row = []
for each_row in sq_row:
tmp_row.append(str(each_row))
table_dict[table[0]]['data'].append(tmp_row)
except Exception:
logger.exception('Reading SQLite db')
return table_dict
Lines 553 and 557 use % string formatting to interpolate table (a tuple from sqlite_master) directly into SQL strings. The table value is attacker-controlled when the SQLite database originates from a malicious application being analyzed.
Attack Vector
The read_sqlite() function is called from two locations:
-
Dynamic Analysis File Viewer (
mobsf/DynamicAnalyzer/views/common/device.py:64):- Triggered when an analyst clicks to view a
.dbfile in device data - Applies to both Android and iOS dynamic analysis
- Triggered when an analyst clicks to view a
-
iOS Static Analysis File Viewer (
mobsf/StaticAnalyzer/views/ios/views/view_source.py:123):- Triggered when an analyst clicks to view a
.dbfile during iOS static analysis
- Triggered when an analyst clicks to view a
Attack Scenario
- Attacker creates a malicious Android APK (or iOS IPA) containing a SQLite database with a crafted table name in the
assets/directory - The SQLite database contains a table created with:
CREATE TABLE "x' UNION SELECT 'SQL_INJECTION_PROOF'--" (id INTEGER); - Security analyst uploads the application to MobSF for analysis
- Analyst browses the extracted files and clicks to view the SQLite database
- MobSF's
read_sqlite()reads table names fromsqlite_master, including the malicious namex' UNION SELECT 'SQL_INJECTION_PROOF'-- - The table name is interpolated into SQL queries via string formatting:
PRAGMA table_info('x' UNION SELECT 'SQL_INJECTION_PROOF'--')-- causes syntax error (DoS)SELECT * FROM 'x' UNION SELECT 'SQL_INJECTION_PROOF'--'-- SQL injection (UNION SELECT returns attacker data)
Impact
Denial of Service (Confirmed)
When the malicious table name is the first table in sqlite_master (i.e., created first in the database), the PRAGMA statement on line 553…
- Record
GHSA-hqjr-43r5-9q58- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-89
- Updated
- 2026-11-02
OSVPYSEC-2026-2662
5.3
MobSF has SQL Injection in its SQLite Database Viewer Utils
Description
MobSF's read_sqlite() function in mobsf/MobSF/utils.py (lines 542-566) uses Python string formatting (%) to construct SQL queries with table names read from a SQLite database's sqlite_master table. When a security analyst uses MobSF to analyze a malicious mobile application containing a crafted SQLite database, attacker-controlled table names are interpolated directly into SQL queries without parameterization or escaping.
This allows an attacker to:
-
Cause Denial of Service -- A malicious table name causes the database viewer to crash, preventing the analyst from viewing ANY data in the SQLite database. A malicious app can use this to hide sensitive data (C2 server URLs, stolen credentials, API keys) from MobSF's analysis.
-
Achieve SQL Injection -- The
SELECT * FROMquery on line 557 is provably injectable viaUNION SELECT, allowing attacker-controlled data to be returned in query results. The current code structure (aPRAGMAstatement that runs first on line 553) limits the full exploitation chain, but the underlying code is verifiably injectable.
Root Cause
The vulnerable code in mobsf/MobSF/utils.py:542-566:
def read_sqlite(sqlite_file):
"""Sqlite Dump - Readable Text."""
table_dict = {}
try:
con = sqlite3.connect(sqlite_file)
cur = con.cursor()
cur.execute('SELECT name FROM sqlite_master WHERE type=\'table\';')
tables = cur.fetchall()
for table in tables:
table_dict[table[0]] = {'head': [], 'data': []}
cur.execute('PRAGMA table_info(\'%s\')' % table) # <-- INJECTION POINT 1
rows = cur.fetchall()
for sq_row in rows:
table_dict[table[0]]['head'].append(sq_row[1])
cur.execute('SELECT * FROM \'%s\'' % table) # <-- INJECTION POINT 2
rows = cur.fetchall()
for sq_row in rows:
tmp_row = []
for each_row in sq_row:
tmp_row.append(str(each_row))
table_dict[table[0]]['data'].append(tmp_row)
except Exception:
logger.exception('Reading SQLite db')
return table_dict
Lines 553 and 557 use % string formatting to interpolate table (a tuple from sqlite_master) directly into SQL strings. The table value is attacker-controlled when the SQLite database originates from a malicious application being analyzed.
Attack Vector
The read_sqlite() function is called from two locations:
-
Dynamic Analysis File Viewer (
mobsf/DynamicAnalyzer/views/common/device.py:64):- Triggered when an analyst clicks to view a
.dbfile in device data - Applies to both Android and iOS dynamic analysis
- Triggered when an analyst clicks to view a
-
iOS Static Analysis File Viewer (
mobsf/StaticAnalyzer/views/ios/views/view_source.py:123):- Triggered when an analyst clicks to view a
.dbfile during iOS static analysis
- Triggered when an analyst clicks to view a
Attack Scenario
- Attacker creates a malicious Android APK (or iOS IPA) containing a SQLite database with a crafted table name in the
assets/directory - The SQLite database contains a table created with:
CREATE TABLE "x' UNION SELECT 'SQL_INJECTION_PROOF'--" (id INTEGER); - Security analyst uploads the application to MobSF for analysis
- Analyst browses the extracted files and clicks to view the SQLite database
- MobSF's
read_sqlite()reads table names fromsqlite_master, including the malicious namex' UNION SELECT 'SQL_INJECTION_PROOF'-- - The table name is interpolated into SQL queries via string formatting:
PRAGMA table_info('x' UNION SELECT 'SQL_INJECTION_PROOF'--')-- causes syntax error (DoS)SELECT * FROM 'x' UNION SELECT 'SQL_INJECTION_PROOF'--'-- SQL injection (UNION SELECT returns attacker data)
Impact
Denial of Service (Confirmed)
When the malicious table name is the first table in sqlite_master (i.e., created first in the database), the PRAGMA statement on line 553…
- Record
PYSEC-2026-2662- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Affected products
Affected packages
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-33545 is a medium vulnerability (CVSS 5.3) in Mobsf Mobile-security-framework-mobsf, published March 24, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.29%, the 21st percentile. Fixed in mobsf 4.4.6.
References
github.com/MobSF/Mobile-Security-Framework-MobSF/security/advisories/GHSA-hqjr-43r5-9q58
github.com/MobSF/Mobile-Security-Framework-MobSF/commit/6f8a43c1b78d21cfbd7186aaafa7f622d990e0f1
github.com/MobSF/Mobile-Security-Framework-MobSF/releases/tag/v4.4.6
nvd.nist.gov/vuln/detail/CVE-2026-33545
github.com/advisories/GHSA-hqjr-43r5-9q58
github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33545.json
github.com/MobSF/Mobile-Security-Framework-MobSF
pypi.org/project/mobsf
Left out here: the rest of 3 source descriptions. The JSON record has them.