VYPR
Moderate severityNVD Advisory· Published Nov 18, 2022· Updated Apr 22, 2025

`CHECK` fail via inputs in `PyFunc` in Tensorflow

CVE-2022-41908

Description

TensorFlow is an open source platform for machine learning. An input token that is not a UTF-8 bytestring will trigger a CHECK fail in tf.raw_ops.PyFunc. We have patched the issue in GitHub commit 9f03a9d3bafe902c1e6beb105b2f24172f238645. The fix will be included in TensorFlow 2.11. We will also cherrypick this commit on TensorFlow 2.10.1, 2.9.3, and TensorFlow 2.8.4, as these are also affected and still in supported range.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
tensorflowPyPI
< 2.8.42.8.4
tensorflowPyPI
>= 2.9.0, < 2.9.32.9.3
tensorflowPyPI
>= 2.10.0, < 2.10.12.10.1
tensorflow-cpuPyPI
< 2.8.42.8.4
tensorflow-gpuPyPI
< 2.8.42.8.4
tensorflow-cpuPyPI
>= 2.9.0, < 2.9.32.9.3
tensorflow-gpuPyPI
>= 2.9.0, < 2.9.32.9.3
tensorflow-cpuPyPI
>= 2.10.0, < 2.10.12.10.1
tensorflow-gpuPyPI
>= 2.10.0, < 2.10.12.10.1

Affected products

1

Patches

1
9f03a9d3bafe

Replace CHECK with returning an InternalError on failing to create python tuple

https://github.com/tensorflow/tensorflowSwachhand LokhandeOct 1, 2022via ghsa
2 files changed · +18 3
  • tensorflow/python/lib/core/py_func.cc+7 3 modified
    @@ -83,8 +83,8 @@ bool IsCPUDevice(const Device* d) {
       return d == nullptr || d->tensorflow_accelerator_device_info() == nullptr;
     }
     
    -// Givens the 'call', prepares the token and inputs as a python tuple
    -// that is appropriate for calling the trampoline.
    +// Given the 'call', prepares the token and inputs as a python tuple that is
    +// appropriate for calling the trampoline.
     Status MakeArgTuple(const PyCall* call, TFE_Context* ctx, PyObject** tuple) {
       int64_t n = call->ins.size();
       PyObject* lst = PyList_New(n);
    @@ -119,7 +119,11 @@ Status MakeArgTuple(const PyCall* call, TFE_Context* ctx, PyObject** tuple) {
         PyList_SetItem(lst, i, arg);
       }
       *tuple = Py_BuildValue("(ssN)", call->token.c_str(), device_name, lst);
    -  CHECK(*tuple);
    +  if (*tuple == nullptr) {
    +    return errors::Internal(
    +        "Failed to create python tuple. Please make sure `token` is a "
    +        "well-formed UTF-8 string.");
    +  }
       return OkStatus();
     }
     
    
  • tensorflow/python/ops/script_ops_test.py+11 0 modified
    @@ -17,7 +17,9 @@
     from tensorflow.python.eager import def_function
     from tensorflow.python.framework import constant_op
     from tensorflow.python.framework import dtypes
    +from tensorflow.python.framework import errors
     from tensorflow.python.framework import test_util
    +from tensorflow.python.ops import gen_script_ops
     from tensorflow.python.ops import resource_variable_ops
     from tensorflow.python.ops import script_ops
     from tensorflow.python.ops.script_ops import numpy_function
    @@ -103,6 +105,15 @@ def plus(a, b):
         expect_result = constant_op.constant(3, dtypes.int32)
         self.assertAllEqual(actual_result, expect_result)
     
    +  @test_util.run_in_graph_and_eager_modes
    +  def test_fail_on_non_utf8_token(self):
    +    value = constant_op.constant(value=[1, 2])
    +    token = b"\xb0"
    +    data_type = [dtypes.int32]
    +    with self.assertRaises((errors.InternalError, UnicodeDecodeError)):
    +      self.evaluate(
    +          gen_script_ops.py_func(input=[value], token=token, Tout=data_type))
    +
     
     if __name__ == "__main__":
       test.main()
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.