Skip to content

[WTEL-10639]security(sqlite): restrict sqlite DSN connection strings - #408

Open
suifri wants to merge 1 commit into
mainfrom
security/WTEL-10639-sqllite-sandbox-root
Open

suifri wants to merge 1 commit into
mainfrom
security/WTEL-10639-sqllite-sandbox-root

Conversation

@suifri

@suifri suifri commented Oct 14, 2026

Copy link
Copy Markdown
Contributor

No description provided.

@webitel-review

webitel-review Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

🤖 Webitel Code Review

Додано пісочницю (sandbox) та безпечну обробку для SQLite в ExternalStoreManager. Оновлено конфігурацію зовнішніх SQL-сховищ (ExternalSQLSettings), додано перевірки шляхів та обмеження прав доступу (read-only за замовчуванням, заборона ATTACH DATABASE), оновлено залежність go-sqlite3 до v1.14.52 та додано розширене модульне тестування.

📋 Walkthrough (8 файл(и/ів))
Файл Зміни
app/app.go Ініціалізацію ExternalStore переведено на нову конфігурацію ExternalSQLSettings із передачею параметрів пісочниці SQLite та логера.
app/sql.go Оновлено GetSqlDb для прийняття context.Context та прапорця writable.
flow/sql.go Додано поле Writable до SqlArgs та виклик cancel() для контексту з таймаутом у SqlHandler.
go.mod Оновлено версію github.com/mattn/go-sqlite3 з v1.14.28 до v1.14.52.
go.sum Оновлено контрольні суми для github.com/mattn/go-sqlite3.
model/config.go Замінено поле ExternalSql на структуру ExternalSQLSettings із методами валідації та підготовки директорії пісочниці.
store/cachelayer/store.go Реалізовано драйвер sqlite3_sandboxed з обмеженням доступу до файлів за межами пісочниці, забороною ATTACH та обробкою порожніх результатів вибірки.
store/cachelayer/store_test.go Додано модульні тести для перевірки безпеки пісочниці, прав запису, блокування ATTACH та потокобезпечності.

Знахідки

  • [medium] store/cachelayer/store.go:126 — Якщо об'єкт ExternalStoreManager створено без опції WithLogger (наприклад, через NewExternalStoreManager()), поле e.logger залишається nil. При створенні нового з'єднання виклик e.logger.Info(...) призведе до паніки через nil pointer dereference. Необхідно додати перевірку на nil або встановити дефолтний логер під час ініціалізації.
🔸 Дрібниці / nitpicks (2)
  • [nit] model/config.go:139 — Описка у назві методу SanitazeOnPrepareFailure (правильно: SanitizeOnPrepareFailure).
  • [nit] store/cachelayer/store.go:240 — Описка у назві методу resolveSanbdoxPath (правильно: resolveSandboxPath).
🔗 Cross-repo callers змінених символів (11)
  • Connect → flow_manager/app/sql.go:16 у (*FlowManager).GetSqlDb (тип ресівера не доведено)
  • Connect → flow_manager/store/cachelayer/store.go:53 у (*ExternalStoreManager).Connect (тип ресівера не доведено)
  • NewExternalStoreManager → flow_manager/app/app.go:124 у NewFlowManager
  • Prepare → engine/app/call.go:128 у (*App).CreateOutboundCall (тип ресівера не доведено)
  • Prepare → engine/model/cc_resource.go:133 у (*ResourceDisplay).Parse (тип ресівера не доведено)
  • Prepare → engine/store/sqlstore/cc_agent_skill_store.go:74 у (SqlAgentSkillStore).BulkCreate (тип ресівера не доведено)
  • GetSqlDb → flow_manager/flow/sql.go:17
  • WithLogger → chat_manager/cmd/bot/server.go:115
  • WithLogger → im-gateway-service/cmd/server/health.go:16
  • WithLogger → im-providers-service/cmd/fx.go:82
  • WithLogger → webitel-emails/cmd/server/fx.go:18

Index-grounded review across the Webitel codebase. Знахідки можуть бути неточними — перевіряйте перед застосуванням.

@suifri
suifri force-pushed the security/WTEL-10639-sqllite-sandbox-root branch 2 times, most recently from 661d94a to 37a430a Compare October 16, 2026 16:04
@suifri
suifri force-pushed the security/WTEL-10639-sqllite-sandbox-root branch from 37a430a to ad1d06d Compare October 16, 2026 16:14

@webitel-review webitel-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Webitel Code Review — пропозиції змін

Comment thread store/cachelayer/store.go
ext := &ExternalDb{db: db}

e.cache.AddWithDefaultExpires(key, ext)
e.logger.Info("store cache db", wlog.String("driver", cfg.Driver))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Запобігання nil pointer dereference у разі відсутності ініціалізованого логера

Suggested change
e.logger.Info("store cache db", wlog.String("driver", cfg.Driver))
if e.logger != nil { e.logger.Info("store cache db", wlog.String("driver", cfg.Driver)) }

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant