cve-2024-38558
Vulnerability from cvelistv5
Published
2024-06-19 13:35
Modified
2024-08-02 04:12
Severity
Summary
net: openvswitch: fix overwriting ct original tuple for ICMPv6
Impacted products
VendorProduct
LinuxLinux
LinuxLinux
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2024-38558",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-06-24T18:25:00.443395Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-06-24T18:25:07.878Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      },
      {
        "providerMetadata": {
          "dateUpdated": "2024-08-02T04:12:25.358Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/6a51ac92bf35d34b4996d6eb67e2fe469f573b11"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/0b532f59437f688563e9c58bdc1436fefa46e3b5"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/5ab6aecbede080b44b8e34720ab72050bf1e6982"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/483eb70f441e2df66ade78aa7217e6e4caadfef3"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/9ec8b0ccadb908d92f7ee211a4eff05fd932f3f6"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/78741b4caae1e880368cb2f5110635f3ce45ecfd"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/431e9215576d7b728f3f53a704d237a520092120"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/d73fb8bddf89503c9fae7c42e50d44c89909aad6"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/7c988176b6c16c516474f6fceebe0f055af5eb56"
          }
        ],
        "title": "CVE Program Container"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/openvswitch/flow.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "6a51ac92bf35",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            },
            {
              "lessThan": "0b532f59437f",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            },
            {
              "lessThan": "5ab6aecbede0",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            },
            {
              "lessThan": "483eb70f441e",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            },
            {
              "lessThan": "9ec8b0ccadb9",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            },
            {
              "lessThan": "78741b4caae1",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            },
            {
              "lessThan": "431e9215576d",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            },
            {
              "lessThan": "d73fb8bddf89",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            },
            {
              "lessThan": "7c988176b6c1",
              "status": "affected",
              "version": "9dd7f8907c37",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/openvswitch/flow.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "4.11"
            },
            {
              "lessThan": "4.11",
              "status": "unaffected",
              "version": "0",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "4.19.*",
              "status": "unaffected",
              "version": "4.19.316",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "5.4.*",
              "status": "unaffected",
              "version": "5.4.278",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.219",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.161",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.93",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.33",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "6.8.*",
              "status": "unaffected",
              "version": "6.8.12",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "6.9.*",
              "status": "unaffected",
              "version": "6.9.3",
              "versionType": "custom"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.10",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: openvswitch: fix overwriting ct original tuple for ICMPv6\n\nOVS_PACKET_CMD_EXECUTE has 3 main attributes:\n - OVS_PACKET_ATTR_KEY - Packet metadata in a netlink format.\n - OVS_PACKET_ATTR_PACKET - Binary packet content.\n - OVS_PACKET_ATTR_ACTIONS - Actions to execute on the packet.\n\nOVS_PACKET_ATTR_KEY is parsed first to populate sw_flow_key structure\nwith the metadata like conntrack state, input port, recirculation id,\netc.  Then the packet itself gets parsed to populate the rest of the\nkeys from the packet headers.\n\nWhenever the packet parsing code starts parsing the ICMPv6 header, it\nfirst zeroes out fields in the key corresponding to Neighbor Discovery\ninformation even if it is not an ND packet.\n\nIt is an \u0027ipv6.nd\u0027 field.  However, the \u0027ipv6\u0027 is a union that shares\nthe space between \u0027nd\u0027 and \u0027ct_orig\u0027 that holds the original tuple\nconntrack metadata parsed from the OVS_PACKET_ATTR_KEY.\n\nND packets should not normally have conntrack state, so it\u0027s fine to\nshare the space, but normal ICMPv6 Echo packets or maybe other types of\nICMPv6 can have the state attached and it should not be overwritten.\n\nThe issue results in all but the last 4 bytes of the destination\naddress being wiped from the original conntrack tuple leading to\nincorrect packet matching and potentially executing wrong actions\nin case this packet recirculates within the datapath or goes back\nto userspace.\n\nND fields should not be accessed in non-ND packets, so not clearing\nthem should be fine.  Executing memset() only for actual ND packets to\navoid the issue.\n\nInitializing the whole thing before parsing is needed because ND packet\nmay not contain all the options.\n\nThe issue only affects the OVS_PACKET_CMD_EXECUTE path and doesn\u0027t\naffect packets entering OVS datapath from network interfaces, because\nin this case CT metadata is populated from skb after the packet is\nalready parsed."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2024-07-15T06:48:02.556Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/6a51ac92bf35d34b4996d6eb67e2fe469f573b11"
        },
        {
          "url": "https://git.kernel.org/stable/c/0b532f59437f688563e9c58bdc1436fefa46e3b5"
        },
        {
          "url": "https://git.kernel.org/stable/c/5ab6aecbede080b44b8e34720ab72050bf1e6982"
        },
        {
          "url": "https://git.kernel.org/stable/c/483eb70f441e2df66ade78aa7217e6e4caadfef3"
        },
        {
          "url": "https://git.kernel.org/stable/c/9ec8b0ccadb908d92f7ee211a4eff05fd932f3f6"
        },
        {
          "url": "https://git.kernel.org/stable/c/78741b4caae1e880368cb2f5110635f3ce45ecfd"
        },
        {
          "url": "https://git.kernel.org/stable/c/431e9215576d7b728f3f53a704d237a520092120"
        },
        {
          "url": "https://git.kernel.org/stable/c/d73fb8bddf89503c9fae7c42e50d44c89909aad6"
        },
        {
          "url": "https://git.kernel.org/stable/c/7c988176b6c16c516474f6fceebe0f055af5eb56"
        }
      ],
      "title": "net: openvswitch: fix overwriting ct original tuple for ICMPv6",
      "x_generator": {
        "engine": "bippy-c9c4e1df01b2"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2024-38558",
    "datePublished": "2024-06-19T13:35:28.226Z",
    "dateReserved": "2024-06-18T19:36:34.921Z",
    "dateUpdated": "2024-08-02T04:12:25.358Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2024-38558\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2024-06-19T14:15:15.983\",\"lastModified\":\"2024-07-15T07:15:09.387\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nnet: openvswitch: fix overwriting ct original tuple for ICMPv6\\n\\nOVS_PACKET_CMD_EXECUTE has 3 main attributes:\\n - OVS_PACKET_ATTR_KEY - Packet metadata in a netlink format.\\n - OVS_PACKET_ATTR_PACKET - Binary packet content.\\n - OVS_PACKET_ATTR_ACTIONS - Actions to execute on the packet.\\n\\nOVS_PACKET_ATTR_KEY is parsed first to populate sw_flow_key structure\\nwith the metadata like conntrack state, input port, recirculation id,\\netc.  Then the packet itself gets parsed to populate the rest of the\\nkeys from the packet headers.\\n\\nWhenever the packet parsing code starts parsing the ICMPv6 header, it\\nfirst zeroes out fields in the key corresponding to Neighbor Discovery\\ninformation even if it is not an ND packet.\\n\\nIt is an \u0027ipv6.nd\u0027 field.  However, the \u0027ipv6\u0027 is a union that shares\\nthe space between \u0027nd\u0027 and \u0027ct_orig\u0027 that holds the original tuple\\nconntrack metadata parsed from the OVS_PACKET_ATTR_KEY.\\n\\nND packets should not normally have conntrack state, so it\u0027s fine to\\nshare the space, but normal ICMPv6 Echo packets or maybe other types of\\nICMPv6 can have the state attached and it should not be overwritten.\\n\\nThe issue results in all but the last 4 bytes of the destination\\naddress being wiped from the original conntrack tuple leading to\\nincorrect packet matching and potentially executing wrong actions\\nin case this packet recirculates within the datapath or goes back\\nto userspace.\\n\\nND fields should not be accessed in non-ND packets, so not clearing\\nthem should be fine.  Executing memset() only for actual ND packets to\\navoid the issue.\\n\\nInitializing the whole thing before parsing is needed because ND packet\\nmay not contain all the options.\\n\\nThe issue only affects the OVS_PACKET_CMD_EXECUTE path and doesn\u0027t\\naffect packets entering OVS datapath from network interfaces, because\\nin this case CT metadata is populated from skb after the packet is\\nalready parsed.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: net: openvswitch: corrige la sobrescritura de la tupla original de ct para ICMPv6 OVS_PACKET_CMD_EXECUTE tiene 3 atributos principales: - OVS_PACKET_ATTR_KEY - Metadatos de paquetes en formato netlink. - OVS_PACKET_ATTR_PACKET: contenido del paquete binario. - OVS_PACKET_ATTR_ACTIONS: acciones a ejecutar en el paquete. OVS_PACKET_ATTR_KEY se analiza primero para completar la estructura sw_flow_key con metadatos como el estado de conexi\u00f3n, el puerto de entrada, la identificaci\u00f3n de recirculaci\u00f3n, etc. Luego, el paquete en s\u00ed se analiza para completar el resto de las claves de los encabezados del paquete. Siempre que el c\u00f3digo de an\u00e1lisis de paquetes comienza a analizar el encabezado ICMPv6, primero pone a cero los campos en la clave correspondiente a la informaci\u00f3n de descubrimiento de vecinos, incluso si no es un paquete ND. Es un campo \u0027ipv6.nd\u0027. Sin embargo, \u0027ipv6\u0027 es una uni\u00f3n que comparte el espacio entre \u0027nd\u0027 y \u0027ct_orig\u0027 que contiene los metadatos de conntrack de tupla originales analizados a partir de OVS_PACKET_ATTR_KEY. Los paquetes ND normalmente no deber\u00edan tener estado de seguimiento, por lo que est\u00e1 bien compartir el espacio, pero los paquetes ICMPv6 Echo normales o tal vez otros tipos de ICMPv6 pueden tener el estado adjunto y no deben sobrescribirse. El problema provoca que todos, excepto los \u00faltimos 4 bytes de la direcci\u00f3n de destino, se borren de la tupla conntrack original, lo que provoca una coincidencia incorrecta de paquetes y, potencialmente, la ejecuci\u00f3n de acciones incorrectas en caso de que este paquete recircule dentro de la ruta de datos o regrese al espacio de usuario. No se debe acceder a los campos ND en paquetes que no sean ND, por lo que no borrarlos deber\u00eda estar bien. Ejecutar memset() solo para paquetes ND reales para evitar el problema. Es necesario inicializar todo antes del an\u00e1lisis porque es posible que el paquete ND no contenga todas las opciones. El problema solo afecta la ruta OVS_PACKET_CMD_EXECUTE y no afecta a los paquetes que ingresan a la ruta de datos OVS desde las interfaces de red, porque en este caso los metadatos CT se completan desde skb despu\u00e9s de que el paquete ya se haya analizado.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/0b532f59437f688563e9c58bdc1436fefa46e3b5\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/431e9215576d7b728f3f53a704d237a520092120\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/483eb70f441e2df66ade78aa7217e6e4caadfef3\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/5ab6aecbede080b44b8e34720ab72050bf1e6982\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/6a51ac92bf35d34b4996d6eb67e2fe469f573b11\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/78741b4caae1e880368cb2f5110635f3ce45ecfd\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/7c988176b6c16c516474f6fceebe0f055af5eb56\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/9ec8b0ccadb908d92f7ee211a4eff05fd932f3f6\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/d73fb8bddf89503c9fae7c42e50d44c89909aad6\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading...

Loading...