CVE-2026-14178
ŚrednieCVSS 5.9Streszczenie
W openGauss podczas przetwarzania wywołań to_timestamp z parametrami NLS, funkcja to_timestamp_with_fmt_nls() zapisuje nls_fmt_str w u_sess->parser_cxt.nls_fmt_str. W ścieżce wykonania seqscan + sort, ten łańcuch jest alokowany w kontekście wyrażenia SeqScan; po zakończeniu SeqScan kontekst pamięci jest resetowany, ale w fazie wyjściowej timestamp_out() nadal uzyskuje dostęp do u_sess->parser_cxt.nls_fmt_str przez CheckNlsFormat(), co prowadzi do użycia po zwolnieniu (heap-use-after-free). Atakujący z uprawnieniami SQL może skonstruować zapytanie to_timestamp(..., ..., nlsparam), aby wywołać ten błąd, powodując awarię procesu backendu i odmowę usługi.
Ocena ryzyka
Ryzyko polega na możliwości wywołania awarii procesu backendu bazy danych przez atakującego z uprawnieniami SQL, co prowadzi do przerwania dostępności usługi (odmowa usługi). W środowiskach z ASan/Memcheck może to skutkować wyjściem z bazy danych, a w produkcji niestabilnością systemu.
Rekomendacja
Zaleca się natychmiastową aktualizację openGauss-server do wersji 7.0.0-RC3 lub nowszej, ponieważ wersje 7.0.0-RC1 i 7.0.0-RC2 są podatne i nie otrzymają osobnych łat. Po aktualizacji problem zostanie wyeliminowany.
Oryginalny opis (angielski, źródło NVD)
openGauss 在处理带 NLS 参数的 to_timestamp 调用时,to_timestamp_with_fmt_nls() 会将 nls_fmt_str 保存到 u_sess->parser_cxt.nls_fmt_str。在 seqscan + sort 执行路径下,该字符串原本被分配在 SeqScan 的表达式上下文中;当 SeqScan 完成后,该内存上下文会被 reset,但后续结果输出阶段 timestamp_out() 仍会通过 CheckNlsFormat() 访问 u_sess->parser_cxt.nls_fmt_str,导致访问已释放内存。攻击者在具备数据库 SQL 执行权限的情况下,可构造特定 to_timestamp(..., ..., nlsparam) 查询触发 heap-use-after-free。在 ASan/Memcheck 环境下表现为数据库服务退出;在实际运行环境中可能造成后端进程异常退出,影响数据库服务可用性,形成拒绝服务风险。该问题在openGauss-server-7.0.0-RC1版本和openGauss-server-7.0.0-RC2版本存在,目前已在openGauss-server-7.0.0-RC3版本修复。由于 openGauss-server-7.0.0-RC1版本和openGauss-server-7.0.0-RC2均为创新版本,不会发布针对性补丁包,涉及版本升级至 openGauss-server-7.0.0-RC3或更新版本即可。

