ghsa-jvhc-5hhr-w3v5
Vulnerability from github
Impact
When mlir::tfg::ConvertGenericFunctionToFunctionDef
is given empty function attributes, it crashes.
cpp
// We pre-allocate the array of operands and populate it using the
// `output_name_to_position` and `control_output_to_position` populated
// previously.
SmallVector<Value> ret_vals(func.ret_size() + func.control_ret_size(),
Value());
for (const auto& ret_val : func.ret()) {
auto position = output_name_to_position.find(ret_val.first);
if (position == output_name_to_position.end())
return InvalidArgument(
"Can't import function, returned value references unknown output "
"argument ",
ret_val.first);
ret_vals[position->second] =
value_manager.GetValueOrCreatePlaceholder(ret_val.second);
}
for (const auto& ret_val : func.control_ret()) {
auto position = control_output_to_position.find(ret_val.first);
if (position == control_output_to_position.end())
return InvalidArgument(
"Can't import function, returned value references unknown output "
"argument ",
ret_val.first);
Value result = value_manager.GetValueOrCreatePlaceholder(
(Twine("^") + ret_val.second).str());
ret_val.second
cannot be empty. Neither can input
.
cpp
// Process every node and create a matching MLIR operation
for (const NodeDef& node : nodes) {
if (node.op().empty()) return InvalidArgument("empty op type");
OperationState state(unknown_loc, absl::StrCat("tfg.", node.op()));
// Fetch the inputs, creating placeholder if an input hasn't been visited.
for (const std::string& input : node.input())
state.operands.push_back(
value_manager.GetValueOrCreatePlaceholder(input));
Patches
We have patched the issue in GitHub commit ad069af92392efee1418c48ff561fd3070a03d7b.
The fix will be included in TensorFlow 2.10.0. We will also cherrypick this commit on TensorFlow 2.9.1, TensorFlow 2.8.1, and TensorFlow 2.7.2, as these are also affected and still in supported range.
For more information
Please consult our security guide for more information regarding the security model and how to contact us with issues and questions.
{ "affected": [ { "package": { "ecosystem": "PyPI", "name": "tensorflow" }, "ranges": [ { "events": [ { "introduced": "0" }, { "fixed": "2.7.2" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "PyPI", "name": "tensorflow" }, "ranges": [ { "events": [ { "introduced": "2.8.0" }, { "fixed": "2.8.1" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "PyPI", "name": "tensorflow" }, "ranges": [ { "events": [ { "introduced": "2.9.0" }, { "fixed": "2.9.1" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "PyPI", "name": "tensorflow-cpu" }, "ranges": [ { "events": [ { "introduced": "0" }, { "fixed": "2.7.2" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "PyPI", "name": "tensorflow-cpu" }, "ranges": [ { "events": [ { "introduced": "2.8.0" }, { "fixed": "2.8.1" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "PyPI", "name": "tensorflow-cpu" }, "ranges": [ { "events": [ { "introduced": "2.9.0" }, { "fixed": "2.9.1" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "PyPI", "name": "tensorflow-gpu" }, "ranges": [ { "events": [ { "introduced": "0" }, { "fixed": "2.7.2" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "PyPI", "name": "tensorflow-gpu" }, "ranges": [ { "events": [ { "introduced": "2.8.0" }, { "fixed": "2.8.1" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "PyPI", "name": "tensorflow-gpu" }, "ranges": [ { "events": [ { "introduced": "2.9.0" }, { "fixed": "2.9.1" } ], "type": "ECOSYSTEM" } ] } ], "aliases": [ "CVE-2022-36012" ], "database_specific": { "cwe_ids": [ "CWE-617" ], "github_reviewed": true, "github_reviewed_at": "2022-09-16T21:19:48Z", "nvd_published_at": "2022-09-16T23:15:00Z", "severity": "MODERATE" }, "details": "### Impact\nWhen [`mlir::tfg::ConvertGenericFunctionToFunctionDef`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/ir/importexport/functiondef_import.cc) is given empty function attributes, it crashes.\n```cpp\n// We pre-allocate the array of operands and populate it using the\n// `output_name_to_position` and `control_output_to_position` populated\n// previously.\nSmallVector\u003cValue\u003e ret_vals(func.ret_size() + func.control_ret_size(),\n Value());\nfor (const auto\u0026 ret_val : func.ret()) {\n auto position = output_name_to_position.find(ret_val.first);\n if (position == output_name_to_position.end())\n return InvalidArgument(\n \"Can\u0027t import function, returned value references unknown output \"\n \"argument \",\n ret_val.first);\n ret_vals[position-\u003esecond] =\n value_manager.GetValueOrCreatePlaceholder(ret_val.second);\n}\nfor (const auto\u0026 ret_val : func.control_ret()) {\n auto position = control_output_to_position.find(ret_val.first);\n if (position == control_output_to_position.end())\n return InvalidArgument(\n \"Can\u0027t import function, returned value references unknown output \"\n \"argument \",\n ret_val.first);\n Value result = value_manager.GetValueOrCreatePlaceholder(\n (Twine(\"^\") + ret_val.second).str());\n```\n`ret_val.second` cannot be empty. Neither can `input`.\n```cpp\n// Process every node and create a matching MLIR operation\nfor (const NodeDef\u0026 node : nodes) {\n if (node.op().empty()) return InvalidArgument(\"empty op type\");\n OperationState state(unknown_loc, absl::StrCat(\"tfg.\", node.op()));\n // Fetch the inputs, creating placeholder if an input hasn\u0027t been visited.\n for (const std::string\u0026 input : node.input())\n state.operands.push_back(\n value_manager.GetValueOrCreatePlaceholder(input));\n```\n\n\n### Patches\nWe have patched the issue in GitHub commit [ad069af92392efee1418c48ff561fd3070a03d7b](https://github.com/tensorflow/tensorflow/commit/ad069af92392efee1418c48ff561fd3070a03d7b).\n\nThe fix will be included in TensorFlow 2.10.0. We will also cherrypick this commit on TensorFlow 2.9.1, TensorFlow 2.8.1, and TensorFlow 2.7.2, as these are also affected and still in supported range.\n\n\n### For more information\nPlease consult [our security guide](https://github.com/tensorflow/tensorflow/blob/master/SECURITY.md) for more information regarding the security model and how to contact us with issues and questions.\n", "id": "GHSA-jvhc-5hhr-w3v5", "modified": "2022-09-19T19:06:13Z", "published": "2022-09-16T21:19:48Z", "references": [ { "type": "WEB", "url": "https://github.com/tensorflow/tensorflow/security/advisories/GHSA-jvhc-5hhr-w3v5" }, { "type": "ADVISORY", "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-36012" }, { "type": "WEB", "url": "https://github.com/tensorflow/tensorflow/commit/ad069af92392efee1418c48ff561fd3070a03d7b" }, { "type": "PACKAGE", "url": "https://github.com/tensorflow/tensorflow" }, { "type": "WEB", "url": "https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/ir/importexport/functiondef_import.cc" }, { "type": "WEB", "url": "https://github.com/tensorflow/tensorflow/releases/tag/v2.10.0" } ], "schema_version": "1.4.0", "severity": [ { "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H", "type": "CVSS_V3" } ], "summary": "TensorFlow vulnerable to assertion fail on MLIR empty edge names" }
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.