When executing a query, the vtgate will go into an endless loop that also keeps consuming memory and eventually will OOM. This causes a denial of service.
{
"review_status": "REVIEWED",
"url": "https://pkg.go.dev/vuln/GO-2024-2826"
}{
"custom_ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "17.0.7"
},
{
"introduced": "18.0.0"
},
{
"fixed": "18.0.5"
},
{
"introduced": "19.0.0"
},
{
"fixed": "19.0.4"
}
],
"type": "ECOSYSTEM"
}
],
"imports": [
{
"path": "vitess.io/vitess/go/mysql/collations/charset",
"symbols": [
"Convert",
"ConvertFromBinary",
"ConvertFromUTF8",
"Validate",
"convertSlow"
]
},
{
"path": "vitess.io/vitess/go/mysql/collations/charset/unicode",
"symbols": [
"Charset_ucs2.DecodeRune",
"Charset_utf16be.DecodeRune",
"Charset_utf16be.EncodeRune",
"Charset_utf32.EncodeRune"
]
},
{
"path": "vitess.io/vitess/go/vt/vtgate/evalengine",
"symbols": [
"Add",
"AggregateEvalTypes",
"CoerceTo",
"CoerceTypes",
"Column.Format",
"Column.FormatFast",
"Comparison.ApplyTinyWeights",
"Comparison.Compare",
"Comparison.Less",
"Comparison.More",
"Comparison.Sort",
"Comparison.SortResult",
"CompiledExpr.Format",
"CompiledExpr.FormatFast",
"Divide",
"EvalResult.MustBoolean",
"EvalResult.String",
"EvalResult.ToBoolean",
"EvalResult.ToBooleanStrict",
"EvalResult.TupleValues",
"EvalResult.Value",
"ExpressionEnv.Evaluate",
"ExpressionEnv.EvaluateVM",
"FieldResolver.Column",
"IntroducerExpr.eval",
"Literal.Format",
"Literal.FormatFast",
"Merger.Init",
"Merger.Pop",
"Merger.Push",
"Multiply",
"NewLiteralBinaryFromBit",
"NewLiteralDateFromBytes",
"NewLiteralDatetimeFromBytes",
"NewLiteralDecimalFromBytes",
"NewLiteralFloatFromBytes",
"NewLiteralIntegralFromBytes",
"NewLiteralTimeFromBytes",
"NullSafeAdd",
"NullsafeCompare",
"NullsafeHashcode",
"NullsafeHashcode128",
"OrderByParams.Compare",
"OrderByParams.String",
"Sorter.Push",
"Sorter.Sorted",
"Subtract",
"Translate",
"TupleBindVariable.Format",
"TupleBindVariable.FormatFast",
"TupleExpr.Format",
"TupleExpr.FormatFast",
"UnsupportedCollationError.Error",
"UntypedExpr.Compile",
"UntypedExpr.Format",
"UntypedExpr.FormatFast",
"WeightString",
"aggregationDecimal.Add",
"aggregationDecimal.Max",
"aggregationDecimal.Min",
"aggregationFloat.Add",
"aggregationFloat.Max",
"aggregationFloat.Min",
"aggregationInt.Add",
"aggregationInt.Max",
"aggregationInt.Min",
"aggregationMinMax.Max",
"aggregationMinMax.Min",
"aggregationSumAny.Add",
"aggregationSumCount.Add",
"aggregationUint.Add",
"aggregationUint.Max",
"aggregationUint.Min",
"argError.Error",
"assembler.Fn_JSON_KEYS",
"assembler.Fn_REGEXP_REPLACE_slow",
"assembler.PushLiteral",
"astCompiler.translateIntroducerExpr",
"errJSONType.Error",
"evalBytes.Hash"
]
}
]
}