Security: OtterMind/Chat2DB

SECURITY.md

Security Policy

Reporting a vulnerability

Do not report security vulnerabilities through public Issues or Discussions.

Please use GitHub's private vulnerability reporting for this repository:

https://github.com/OtterMind/Chat2DB/security/advisories/new

Include the affected Chat2DB edition and version, deployment type, impact, reproduction steps, and any relevant logs. Remove passwords, API keys, access tokens, private URLs, and production data before submitting.

Scope

This policy covers security vulnerabilities in the Chat2DB Community code and its public distribution artifacts. Product-specific Pro or Local issues should still be reported privately when the issue affects shared Community code.

Community security model

Chat2DB Community is a single-user, local-first application. The operating system user who starts Chat2DB is the trusted operator. Community does not provide user accounts, tenant isolation, or authorization boundaries between multiple users.

Supported deployment boundary

Supported Community deployments must keep the HTTP service available only on the local machine. Bind host access to 127.0.0.1 or ::1 and do not expose the service directly to other users or untrusted networks.

The Docker container listens on its internal container interface so that host port publishing works. This does not change the security boundary: the published host port must remain bound to a loopback address. Multi-user, shared-server, LAN-exposed, and Internet-facing Community deployments are not supported.

Trusted executable extensions

Custom JDBC drivers are executable Java code. Installing a custom driver is equivalent to installing a plugin or running third-party software. Drivers explicitly selected or uploaded by the trusted operator are inside the Community trust boundary and must come from a source the operator trusts.

A report that relies only on the trusted operator intentionally installing a malicious driver is outside this security model. A vulnerability remains in scope when an untrusted party or untrusted input can install, replace, select, or execute a driver without the operator's explicit intent.

Untrusted data

Local-first does not mean that all processed content is trusted. Imported configuration files and archives, SQL files, database contents, AI responses, downloaded data, browser origins, and HTTP requests not initiated by the trusted operator must be treated as untrusted data.

Processing untrusted data must not allow code execution, filesystem escape, credential disclosure, unauthorized network access, or modification of trusted application files.

Out of scope

The following are outside the supported Community security boundary:

  • A trusted operator intentionally installing a malicious custom JDBC driver.
  • Attacks that require control of the same operating-system account as the Chat2DB process.
  • Multi-user or remote-network deployments created by overriding the loopback-only configuration.
  • Damage caused by directly modifying Chat2DB local storage while already possessing equivalent filesystem access.

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Security: OtterMind/Chat2DB

SECURITY.md

Security Policy

Reporting a vulnerability

Do not report security vulnerabilities through public Issues or Discussions.

Please use GitHub's private vulnerability reporting for this repository:

https://github.com/OtterMind/Chat2DB/security/advisories/new

Include the affected Chat2DB edition and version, deployment type, impact, reproduction steps, and any relevant logs. Remove passwords, API keys, access tokens, private URLs, and production data before submitting.

Scope

This policy covers security vulnerabilities in the Chat2DB Community code and its public distribution artifacts. Product-specific Pro or Local issues should still be reported privately when the issue affects shared Community code.

Community security model

Chat2DB Community is a single-user, local-first application. The operating system user who starts Chat2DB is the trusted operator. Community does not provide user accounts, tenant isolation, or authorization boundaries between multiple users.

Supported deployment boundary

Supported Community deployments must keep the HTTP service available only on the local machine. Bind host access to 127.0.0.1 or ::1 and do not expose the service directly to other users or untrusted networks.

The Docker container listens on its internal container interface so that host port publishing works. This does not change the security boundary: the published host port must remain bound to a loopback address. Multi-user, shared-server, LAN-exposed, and Internet-facing Community deployments are not supported.

Trusted executable extensions

Custom JDBC drivers are executable Java code. Installing a custom driver is equivalent to installing a plugin or running third-party software. Drivers explicitly selected or uploaded by the trusted operator are inside the Community trust boundary and must come from a source the operator trusts.

A report that relies only on the trusted operator intentionally installing a malicious driver is outside this security model. A vulnerability remains in scope when an untrusted party or untrusted input can install, replace, select, or execute a driver without the operator's explicit intent.

Untrusted data

Local-first does not mean that all processed content is trusted. Imported configuration files and archives, SQL files, database contents, AI responses, downloaded data, browser origins, and HTTP requests not initiated by the trusted operator must be treated as untrusted data.

Processing untrusted data must not allow code execution, filesystem escape, credential disclosure, unauthorized network access, or modification of trusted application files.

Out of scope

The following are outside the supported Community security boundary:

  • A trusted operator intentionally installing a malicious custom JDBC driver.
  • Attacks that require control of the same operating-system account as the Chat2DB process.
  • Multi-user or remote-network deployments created by overriding the loopback-only configuration.
  • Damage caused by directly modifying Chat2DB local storage while already possessing equivalent filesystem access.

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Security: OtterMind/Chat2DB

SECURITY.md

Security Policy

Reporting a vulnerability

Do not report security vulnerabilities through public Issues or Discussions.

Please use GitHub's private vulnerability reporting for this repository:

https://github.com/OtterMind/Chat2DB/security/advisories/new

Include the affected Chat2DB edition and version, deployment type, impact, reproduction steps, and any relevant logs. Remove passwords, API keys, access tokens, private URLs, and production data before submitting.

Scope

This policy covers security vulnerabilities in the Chat2DB Community code and its public distribution artifacts. Product-specific Pro or Local issues should still be reported privately when the issue affects shared Community code.

Community security model

Chat2DB Community is a single-user, local-first application. The operating system user who starts Chat2DB is the trusted operator. Community does not provide user accounts, tenant isolation, or authorization boundaries between multiple users.

Supported deployment boundary

Supported Community deployments must keep the HTTP service available only on the local machine. Bind host access to 127.0.0.1 or ::1 and do not expose the service directly to other users or untrusted networks.

The Docker container listens on its internal container interface so that host port publishing works. This does not change the security boundary: the published host port must remain bound to a loopback address. Multi-user, shared-server, LAN-exposed, and Internet-facing Community deployments are not supported.

Trusted executable extensions

Custom JDBC drivers are executable Java code. Installing a custom driver is equivalent to installing a plugin or running third-party software. Drivers explicitly selected or uploaded by the trusted operator are inside the Community trust boundary and must come from a source the operator trusts.

A report that relies only on the trusted operator intentionally installing a malicious driver is outside this security model. A vulnerability remains in scope when an untrusted party or untrusted input can install, replace, select, or execute a driver without the operator's explicit intent.

Untrusted data

Local-first does not mean that all processed content is trusted. Imported configuration files and archives, SQL files, database contents, AI responses, downloaded data, browser origins, and HTTP requests not initiated by the trusted operator must be treated as untrusted data.

Processing untrusted data must not allow code execution, filesystem escape, credential disclosure, unauthorized network access, or modification of trusted application files.

Out of scope

The following are outside the supported Community security boundary:

  • A trusted operator intentionally installing a malicious custom JDBC driver.
  • Attacks that require control of the same operating-system account as the Chat2DB process.
  • Multi-user or remote-network deployments created by overriding the loopback-only configuration.
  • Damage caused by directly modifying Chat2DB local storage while already possessing equivalent filesystem access.

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Security: OtterMind/Chat2DB

SECURITY.md

Security Policy

Reporting a vulnerability

Do not report security vulnerabilities through public Issues or Discussions.

Please use GitHub's private vulnerability reporting for this repository:

https://github.com/OtterMind/Chat2DB/security/advisories/new

Include the affected Chat2DB edition and version, deployment type, impact, reproduction steps, and any relevant logs. Remove passwords, API keys, access tokens, private URLs, and production data before submitting.

Scope

This policy covers security vulnerabilities in the Chat2DB Community code and its public distribution artifacts. Product-specific Pro or Local issues should still be reported privately when the issue affects shared Community code.

Community security model

Chat2DB Community is a single-user, local-first application. The operating system user who starts Chat2DB is the trusted operator. Community does not provide user accounts, tenant isolation, or authorization boundaries between multiple users.

Supported deployment boundary

Supported Community deployments must keep the HTTP service available only on the local machine. Bind host access to 127.0.0.1 or ::1 and do not expose the service directly to other users or untrusted networks.

The Docker container listens on its internal container interface so that host port publishing works. This does not change the security boundary: the published host port must remain bound to a loopback address. Multi-user, shared-server, LAN-exposed, and Internet-facing Community deployments are not supported.

Trusted executable extensions

Custom JDBC drivers are executable Java code. Installing a custom driver is equivalent to installing a plugin or running third-party software. Drivers explicitly selected or uploaded by the trusted operator are inside the Community trust boundary and must come from a source the operator trusts.

A report that relies only on the trusted operator intentionally installing a malicious driver is outside this security model. A vulnerability remains in scope when an untrusted party or untrusted input can install, replace, select, or execute a driver without the operator's explicit intent.

Untrusted data

Local-first does not mean that all processed content is trusted. Imported configuration files and archives, SQL files, database contents, AI responses, downloaded data, browser origins, and HTTP requests not initiated by the trusted operator must be treated as untrusted data.

Processing untrusted data must not allow code execution, filesystem escape, credential disclosure, unauthorized network access, or modification of trusted application files.

Out of scope

The following are outside the supported Community security boundary:

  • A trusted operator intentionally installing a malicious custom JDBC driver.
  • Attacks that require control of the same operating-system account as the Chat2DB process.
  • Multi-user or remote-network deployments created by overriding the loopback-only configuration.
  • Damage caused by directly modifying Chat2DB local storage while already possessing equivalent filesystem access.

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Security: OtterMind/Chat2DB

SECURITY.md

Security Policy

Reporting a vulnerability

Do not report security vulnerabilities through public Issues or Discussions.

Please use GitHub's private vulnerability reporting for this repository:

https://github.com/OtterMind/Chat2DB/security/advisories/new

Include the affected Chat2DB edition and version, deployment type, impact, reproduction steps, and any relevant logs. Remove passwords, API keys, access tokens, private URLs, and production data before submitting.

Scope

This policy covers security vulnerabilities in the Chat2DB Community code and its public distribution artifacts. Product-specific Pro or Local issues should still be reported privately when the issue affects shared Community code.

Community security model

Chat2DB Community is a single-user, local-first application. The operating system user who starts Chat2DB is the trusted operator. Community does not provide user accounts, tenant isolation, or authorization boundaries between multiple users.

Supported deployment boundary

Supported Community deployments must keep the HTTP service available only on the local machine. Bind host access to 127.0.0.1 or ::1 and do not expose the service directly to other users or untrusted networks.

The Docker container listens on its internal container interface so that host port publishing works. This does not change the security boundary: the published host port must remain bound to a loopback address. Multi-user, shared-server, LAN-exposed, and Internet-facing Community deployments are not supported.

Trusted executable extensions

Custom JDBC drivers are executable Java code. Installing a custom driver is equivalent to installing a plugin or running third-party software. Drivers explicitly selected or uploaded by the trusted operator are inside the Community trust boundary and must come from a source the operator trusts.

A report that relies only on the trusted operator intentionally installing a malicious driver is outside this security model. A vulnerability remains in scope when an untrusted party or untrusted input can install, replace, select, or execute a driver without the operator's explicit intent.

Untrusted data

Local-first does not mean that all processed content is trusted. Imported configuration files and archives, SQL files, database contents, AI responses, downloaded data, browser origins, and HTTP requests not initiated by the trusted operator must be treated as untrusted data.

Processing untrusted data must not allow code execution, filesystem escape, credential disclosure, unauthorized network access, or modification of trusted application files.

Out of scope

The following are outside the supported Community security boundary:

  • A trusted operator intentionally installing a malicious custom JDBC driver.
  • Attacks that require control of the same operating-system account as the Chat2DB process.
  • Multi-user or remote-network deployments created by overriding the loopback-only configuration.
  • Damage caused by directly modifying Chat2DB local storage while already possessing equivalent filesystem access.

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Security: OtterMind/Chat2DB

SECURITY.md

Security Policy

Reporting a vulnerability

Do not report security vulnerabilities through public Issues or Discussions.

Please use GitHub's private vulnerability reporting for this repository:

https://github.com/OtterMind/Chat2DB/security/advisories/new

Include the affected Chat2DB edition and version, deployment type, impact, reproduction steps, and any relevant logs. Remove passwords, API keys, access tokens, private URLs, and production data before submitting.

Scope

This policy covers security vulnerabilities in the Chat2DB Community code and its public distribution artifacts. Product-specific Pro or Local issues should still be reported privately when the issue affects shared Community code.

Community security model

Chat2DB Community is a single-user, local-first application. The operating system user who starts Chat2DB is the trusted operator. Community does not provide user accounts, tenant isolation, or authorization boundaries between multiple users.

Supported deployment boundary

Supported Community deployments must keep the HTTP service available only on the local machine. Bind host access to 127.0.0.1 or ::1 and do not expose the service directly to other users or untrusted networks.

The Docker container listens on its internal container interface so that host port publishing works. This does not change the security boundary: the published host port must remain bound to a loopback address. Multi-user, shared-server, LAN-exposed, and Internet-facing Community deployments are not supported.

Trusted executable extensions

Custom JDBC drivers are executable Java code. Installing a custom driver is equivalent to installing a plugin or running third-party software. Drivers explicitly selected or uploaded by the trusted operator are inside the Community trust boundary and must come from a source the operator trusts.

A report that relies only on the trusted operator intentionally installing a malicious driver is outside this security model. A vulnerability remains in scope when an untrusted party or untrusted input can install, replace, select, or execute a driver without the operator's explicit intent.

Untrusted data

Local-first does not mean that all processed content is trusted. Imported configuration files and archives, SQL files, database contents, AI responses, downloaded data, browser origins, and HTTP requests not initiated by the trusted operator must be treated as untrusted data.

Processing untrusted data must not allow code execution, filesystem escape, credential disclosure, unauthorized network access, or modification of trusted application files.

Out of scope

The following are outside the supported Community security boundary:

  • A trusted operator intentionally installing a malicious custom JDBC driver.
  • Attacks that require control of the same operating-system account as the Chat2DB process.
  • Multi-user or remote-network deployments created by overriding the loopback-only configuration.
  • Damage caused by directly modifying Chat2DB local storage while already possessing equivalent filesystem access.

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Security: OtterMind/Chat2DB

SECURITY.md

Security Policy

Reporting a vulnerability

Do not report security vulnerabilities through public Issues or Discussions.

Please use GitHub's private vulnerability reporting for this repository:

https://github.com/OtterMind/Chat2DB/security/advisories/new

Include the affected Chat2DB edition and version, deployment type, impact, reproduction steps, and any relevant logs. Remove passwords, API keys, access tokens, private URLs, and production data before submitting.

Scope

This policy covers security vulnerabilities in the Chat2DB Community code and its public distribution artifacts. Product-specific Pro or Local issues should still be reported privately when the issue affects shared Community code.

Community security model

Chat2DB Community is a single-user, local-first application. The operating system user who starts Chat2DB is the trusted operator. Community does not provide user accounts, tenant isolation, or authorization boundaries between multiple users.

Supported deployment boundary

Supported Community deployments must keep the HTTP service available only on the local machine. Bind host access to 127.0.0.1 or ::1 and do not expose the service directly to other users or untrusted networks.

The Docker container listens on its internal container interface so that host port publishing works. This does not change the security boundary: the published host port must remain bound to a loopback address. Multi-user, shared-server, LAN-exposed, and Internet-facing Community deployments are not supported.

Trusted executable extensions

Custom JDBC drivers are executable Java code. Installing a custom driver is equivalent to installing a plugin or running third-party software. Drivers explicitly selected or uploaded by the trusted operator are inside the Community trust boundary and must come from a source the operator trusts.

A report that relies only on the trusted operator intentionally installing a malicious driver is outside this security model. A vulnerability remains in scope when an untrusted party or untrusted input can install, replace, select, or execute a driver without the operator's explicit intent.

Untrusted data

Local-first does not mean that all processed content is trusted. Imported configuration files and archives, SQL files, database contents, AI responses, downloaded data, browser origins, and HTTP requests not initiated by the trusted operator must be treated as untrusted data.

Processing untrusted data must not allow code execution, filesystem escape, credential disclosure, unauthorized network access, or modification of trusted application files.

Out of scope

The following are outside the supported Community security boundary:

  • A trusted operator intentionally installing a malicious custom JDBC driver.
  • Attacks that require control of the same operating-system account as the Chat2DB process.
  • Multi-user or remote-network deployments created by overriding the loopback-only configuration.
  • Damage caused by directly modifying Chat2DB local storage while already possessing equivalent filesystem access.

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Security: OtterMind/Chat2DB

SECURITY.md

Security Policy

Reporting a vulnerability

Do not report security vulnerabilities through public Issues or Discussions.

Please use GitHub's private vulnerability reporting for this repository:

https://github.com/OtterMind/Chat2DB/security/advisories/new

Include the affected Chat2DB edition and version, deployment type, impact, reproduction steps, and any relevant logs. Remove passwords, API keys, access tokens, private URLs, and production data before submitting.

Scope

This policy covers security vulnerabilities in the Chat2DB Community code and its public distribution artifacts. Product-specific Pro or Local issues should still be reported privately when the issue affects shared Community code.

Community security model

Chat2DB Community is a single-user, local-first application. The operating system user who starts Chat2DB is the trusted operator. Community does not provide user accounts, tenant isolation, or authorization boundaries between multiple users.

Supported deployment boundary

Supported Community deployments must keep the HTTP service available only on the local machine. Bind host access to 127.0.0.1 or ::1 and do not expose the service directly to other users or untrusted networks.

The Docker container listens on its internal container interface so that host port publishing works. This does not change the security boundary: the published host port must remain bound to a loopback address. Multi-user, shared-server, LAN-exposed, and Internet-facing Community deployments are not supported.

Trusted executable extensions

Custom JDBC drivers are executable Java code. Installing a custom driver is equivalent to installing a plugin or running third-party software. Drivers explicitly selected or uploaded by the trusted operator are inside the Community trust boundary and must come from a source the operator trusts.

A report that relies only on the trusted operator intentionally installing a malicious driver is outside this security model. A vulnerability remains in scope when an untrusted party or untrusted input can install, replace, select, or execute a driver without the operator's explicit intent.

Untrusted data

Local-first does not mean that all processed content is trusted. Imported configuration files and archives, SQL files, database contents, AI responses, downloaded data, browser origins, and HTTP requests not initiated by the trusted operator must be treated as untrusted data.

Processing untrusted data must not allow code execution, filesystem escape, credential disclosure, unauthorized network access, or modification of trusted application files.

Out of scope

The following are outside the supported Community security boundary:

  • A trusted operator intentionally installing a malicious custom JDBC driver.
  • Attacks that require control of the same operating-system account as the Chat2DB process.
  • Multi-user or remote-network deployments created by overriding the loopback-only configuration.
  • Damage caused by directly modifying Chat2DB local storage while already possessing equivalent filesystem access.

There aren't any published security advisories