cve-2022-48910
Vulnerability from cvelistv5
Published
2024-08-22 01:30
Modified
2024-12-19 08:10
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved: net: ipv6: ensure we call ipv6_mc_down() at most once There are two reasons for addrconf_notify() to be called with NETDEV_DOWN: either the network device is actually going down, or IPv6 was disabled on the interface. If either of them stays down while the other is toggled, we repeatedly call the code for NETDEV_DOWN, including ipv6_mc_down(), while never calling the corresponding ipv6_mc_up() in between. This will cause a new entry in idev->mc_tomb to be allocated for each multicast group the interface is subscribed to, which in turn leaks one struct ifmcaddr6 per nontrivial multicast group the interface is subscribed to. The following reproducer will leak at least $n objects: ip addr add ff2e::4242/32 dev eth0 autojoin sysctl -w net.ipv6.conf.eth0.disable_ipv6=1 for i in $(seq 1 $n); do ip link set up eth0; ip link set down eth0 done Joining groups with IPV6_ADD_MEMBERSHIP (unprivileged) or setting the sysctl net.ipv6.conf.eth0.forwarding to 1 (=> subscribing to ff02::2) can also be used to create a nontrivial idev->mc_list, which will the leak objects with the right up-down-sequence. Based on both sources for NETDEV_DOWN events the interface IPv6 state should be considered: - not ready if the network interface is not ready OR IPv6 is disabled for it - ready if the network interface is ready AND IPv6 is enabled for it The functions ipv6_mc_up() and ipv6_down() should only be run when this state changes. Implement this by remembering when the IPv6 state is ready, and only run ipv6_mc_down() if it actually changed from ready to not ready. The other direction (not ready -> ready) already works correctly, as: - the interface notification triggered codepath for NETDEV_UP / NETDEV_CHANGE returns early if ipv6 is disabled, and - the disable_ipv6=0 triggered codepath skips fully initializing the interface as long as addrconf_link_ready(dev) returns false - calling ipv6_mc_up() repeatedly does not leak anything
Impacted products
Vendor Product Version
Linux Linux Version: 3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36
Version: 3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36
Version: 3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36
Version: 3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36
Version: 3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36
Version: 3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36
Version: 3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36
Version: 3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36
Create a notification for this product.
   Linux Linux Version: 3.18
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2022-48910",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-09-10T15:34:04.134343Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-09-12T17:33:02.150Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/ipv6/addrconf.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "9a8736b2da28b24f01707f592ff059b9f90a058c",
              "status": "affected",
              "version": "3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36",
              "versionType": "git"
            },
            {
              "lessThan": "c71bf3229f9e9dd60ba02f5a5be02066edf57012",
              "status": "affected",
              "version": "3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36",
              "versionType": "git"
            },
            {
              "lessThan": "24888915364cfa410de62d8abb5df95c3b67455d",
              "status": "affected",
              "version": "3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36",
              "versionType": "git"
            },
            {
              "lessThan": "9588ac2eddc2f223ebcebf6e9f5caed84d32922b",
              "status": "affected",
              "version": "3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36",
              "versionType": "git"
            },
            {
              "lessThan": "f4c63b24dea9cc2043ff845dcca9aaf8109ea38a",
              "status": "affected",
              "version": "3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36",
              "versionType": "git"
            },
            {
              "lessThan": "b11781515208dd31fbcd0b664078dce5dc44523f",
              "status": "affected",
              "version": "3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36",
              "versionType": "git"
            },
            {
              "lessThan": "72124e65a70b84e6303a5cd21b0ac1f27d7d61a4",
              "status": "affected",
              "version": "3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36",
              "versionType": "git"
            },
            {
              "lessThan": "9995b408f17ff8c7f11bc725c8aa225ba3a63b1c",
              "status": "affected",
              "version": "3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/ipv6/addrconf.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.18"
            },
            {
              "lessThan": "3.18",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "4.9.*",
              "status": "unaffected",
              "version": "4.9.313",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "4.14.*",
              "status": "unaffected",
              "version": "4.14.278",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "4.19.*",
              "status": "unaffected",
              "version": "4.19.323",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.4.*",
              "status": "unaffected",
              "version": "5.4.193",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.104",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.27",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.16.*",
              "status": "unaffected",
              "version": "5.16.13",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "5.17",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: ipv6: ensure we call ipv6_mc_down() at most once\n\nThere are two reasons for addrconf_notify() to be called with NETDEV_DOWN:\neither the network device is actually going down, or IPv6 was disabled\non the interface.\n\nIf either of them stays down while the other is toggled, we repeatedly\ncall the code for NETDEV_DOWN, including ipv6_mc_down(), while never\ncalling the corresponding ipv6_mc_up() in between. This will cause a\nnew entry in idev-\u003emc_tomb to be allocated for each multicast group\nthe interface is subscribed to, which in turn leaks one struct ifmcaddr6\nper nontrivial multicast group the interface is subscribed to.\n\nThe following reproducer will leak at least $n objects:\n\nip addr add ff2e::4242/32 dev eth0 autojoin\nsysctl -w net.ipv6.conf.eth0.disable_ipv6=1\nfor i in $(seq 1 $n); do\n\tip link set up eth0; ip link set down eth0\ndone\n\nJoining groups with IPV6_ADD_MEMBERSHIP (unprivileged) or setting the\nsysctl net.ipv6.conf.eth0.forwarding to 1 (=\u003e subscribing to ff02::2)\ncan also be used to create a nontrivial idev-\u003emc_list, which will the\nleak objects with the right up-down-sequence.\n\nBased on both sources for NETDEV_DOWN events the interface IPv6 state\nshould be considered:\n\n - not ready if the network interface is not ready OR IPv6 is disabled\n   for it\n - ready if the network interface is ready AND IPv6 is enabled for it\n\nThe functions ipv6_mc_up() and ipv6_down() should only be run when this\nstate changes.\n\nImplement this by remembering when the IPv6 state is ready, and only\nrun ipv6_mc_down() if it actually changed from ready to not ready.\n\nThe other direction (not ready -\u003e ready) already works correctly, as:\n\n - the interface notification triggered codepath for NETDEV_UP /\n   NETDEV_CHANGE returns early if ipv6 is disabled, and\n - the disable_ipv6=0 triggered codepath skips fully initializing the\n   interface as long as addrconf_link_ready(dev) returns false\n - calling ipv6_mc_up() repeatedly does not leak anything"
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2024-12-19T08:10:19.584Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/9a8736b2da28b24f01707f592ff059b9f90a058c"
        },
        {
          "url": "https://git.kernel.org/stable/c/c71bf3229f9e9dd60ba02f5a5be02066edf57012"
        },
        {
          "url": "https://git.kernel.org/stable/c/24888915364cfa410de62d8abb5df95c3b67455d"
        },
        {
          "url": "https://git.kernel.org/stable/c/9588ac2eddc2f223ebcebf6e9f5caed84d32922b"
        },
        {
          "url": "https://git.kernel.org/stable/c/f4c63b24dea9cc2043ff845dcca9aaf8109ea38a"
        },
        {
          "url": "https://git.kernel.org/stable/c/b11781515208dd31fbcd0b664078dce5dc44523f"
        },
        {
          "url": "https://git.kernel.org/stable/c/72124e65a70b84e6303a5cd21b0ac1f27d7d61a4"
        },
        {
          "url": "https://git.kernel.org/stable/c/9995b408f17ff8c7f11bc725c8aa225ba3a63b1c"
        }
      ],
      "title": "net: ipv6: ensure we call ipv6_mc_down() at most once",
      "x_generator": {
        "engine": "bippy-5f407fcff5a0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2022-48910",
    "datePublished": "2024-08-22T01:30:54.351Z",
    "dateReserved": "2024-08-21T06:06:23.293Z",
    "dateUpdated": "2024-12-19T08:10:19.584Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2022-48910\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2024-08-22T02:15:05.403\",\"lastModified\":\"2024-11-08T16:15:17.573\",\"vulnStatus\":\"Modified\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nnet: ipv6: ensure we call ipv6_mc_down() at most once\\n\\nThere are two reasons for addrconf_notify() to be called with NETDEV_DOWN:\\neither the network device is actually going down, or IPv6 was disabled\\non the interface.\\n\\nIf either of them stays down while the other is toggled, we repeatedly\\ncall the code for NETDEV_DOWN, including ipv6_mc_down(), while never\\ncalling the corresponding ipv6_mc_up() in between. This will cause a\\nnew entry in idev-\u003emc_tomb to be allocated for each multicast group\\nthe interface is subscribed to, which in turn leaks one struct ifmcaddr6\\nper nontrivial multicast group the interface is subscribed to.\\n\\nThe following reproducer will leak at least $n objects:\\n\\nip addr add ff2e::4242/32 dev eth0 autojoin\\nsysctl -w net.ipv6.conf.eth0.disable_ipv6=1\\nfor i in $(seq 1 $n); do\\n\\tip link set up eth0; ip link set down eth0\\ndone\\n\\nJoining groups with IPV6_ADD_MEMBERSHIP (unprivileged) or setting the\\nsysctl net.ipv6.conf.eth0.forwarding to 1 (=\u003e subscribing to ff02::2)\\ncan also be used to create a nontrivial idev-\u003emc_list, which will the\\nleak objects with the right up-down-sequence.\\n\\nBased on both sources for NETDEV_DOWN events the interface IPv6 state\\nshould be considered:\\n\\n - not ready if the network interface is not ready OR IPv6 is disabled\\n   for it\\n - ready if the network interface is ready AND IPv6 is enabled for it\\n\\nThe functions ipv6_mc_up() and ipv6_down() should only be run when this\\nstate changes.\\n\\nImplement this by remembering when the IPv6 state is ready, and only\\nrun ipv6_mc_down() if it actually changed from ready to not ready.\\n\\nThe other direction (not ready -\u003e ready) already works correctly, as:\\n\\n - the interface notification triggered codepath for NETDEV_UP /\\n   NETDEV_CHANGE returns early if ipv6 is disabled, and\\n - the disable_ipv6=0 triggered codepath skips fully initializing the\\n   interface as long as addrconf_link_ready(dev) returns false\\n - calling ipv6_mc_up() repeatedly does not leak anything\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: net: ipv6: aseg\u00farese de llamar a ipv6_mc_down() como m\u00e1ximo una vez. Hay dos razones para llamar a addrconf_notify() con NETDEV_DOWN: o el dispositivo de red realmente est\u00e1 cayendo o IPv6 estaba deshabilitado en la interfaz. Si alguno de ellos permanece inactivo mientras el otro est\u00e1 activado, llamamos repetidamente al c\u00f3digo para NETDEV_DOWN, incluido ipv6_mc_down(), pero nunca llamamos al ipv6_mc_up() correspondiente en el medio. Esto har\u00e1 que se asigne una nueva entrada en idev-\u0026gt;mc_tomb para cada grupo de multidifusi\u00f3n al que est\u00e9 suscrita la interfaz, lo que a su vez filtrar\u00e1 una estructura ifmcaddr6 por cada grupo de multidifusi\u00f3n no trivial al que est\u00e9 suscrita la interfaz. El siguiente reproductor filtrar\u00e1 al menos $n objetos: ip addr add ff2e::4242/32 dev eth0 autojoin sysctl -w net.ipv6.conf.eth0.disable_ipv6=1 for i in $(seq 1 $n); configurar el enlace ip eth0; ip link set down eth0 done Unirse a grupos con IPV6_ADD_MEMBERSHIP (sin privilegios) o configurar sysctl net.ipv6.conf.eth0.forwarding en 1 (=\u0026gt; suscribirse a ff02::2) tambi\u00e9n se puede usar para crear un idev-\u0026gt;mc_list no trivial , que filtrar\u00e1 objetos con la secuencia correcta de arriba a abajo. Seg\u00fan ambas fuentes de eventos NETDEV_DOWN, se debe considerar el estado de la interfaz IPv6: - no lista si la interfaz de red no est\u00e1 lista O IPv6 est\u00e1 deshabilitado - lista si la interfaz de red est\u00e1 lista Y IPv6 est\u00e1 habilitada Las funciones ipv6_mc_up() e ipv6_down() solo debe ejecutarse cuando este estado cambie. Implemente esto recordando cu\u00e1ndo el estado de IPv6 est\u00e1 listo y solo ejecute ipv6_mc_down() si realmente cambi\u00f3 de listo a no listo. La otra direcci\u00f3n (no listo -\u0026gt; listo) ya funciona correctamente, ya que: - la ruta de c\u00f3digo activada de notificaci\u00f3n de interfaz para NETDEV_UP / NETDEV_CHANGE regresa antes si ipv6 est\u00e1 deshabilitado, y - la ruta de c\u00f3digo activada enable_ipv6=0 omite la inicializaci\u00f3n completa de la interfaz siempre que addrconf_link_ready (dev) devuelve falso: llamar a ipv6_mc_up() repetidamente no filtra nada\"}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\",\"baseScore\":5.5,\"baseSeverity\":\"MEDIUM\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"NONE\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":3.6}]},\"weaknesses\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"NVD-CWE-noinfo\"}]}],\"configurations\":[{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"3.18\",\"versionEndExcluding\":\"4.9.313\",\"matchCriteriaId\":\"927E10B9-07A2-4D21-B518-62246BE28995\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"4.10\",\"versionEndExcluding\":\"4.14.278\",\"matchCriteriaId\":\"050329AA-B7D6-45EA-9341-E396DC054423\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"4.15\",\"versionEndExcluding\":\"5.4.193\",\"matchCriteriaId\":\"A014E697-B30F-4699-8F9E-0FB4E2BB359C\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"5.5\",\"versionEndExcluding\":\"5.10.104\",\"matchCriteriaId\":\"764998FC-D1F7-4BAA-BD56-A553C7AB8F08\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"5.11\",\"versionEndExcluding\":\"5.15.27\",\"matchCriteriaId\":\"B3A8E092-3021-4A34-8DCE-B89D2238818B\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"5.16\",\"versionEndExcluding\":\"5.16.13\",\"matchCriteriaId\":\"B871B667-EDC0-435D-909E-E918D8D90995\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:5.17:rc1:*:*:*:*:*:*\",\"matchCriteriaId\":\"7BD5F8D9-54FA-4CB0-B4F0-CB0471FDDB2D\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:5.17:rc2:*:*:*:*:*:*\",\"matchCriteriaId\":\"E6E34B23-78B4-4516-9BD8-61B33F4AC49A\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:5.17:rc3:*:*:*:*:*:*\",\"matchCriteriaId\":\"C030FA3D-03F4-4FB9-9DBF-D08E5CAC51AA\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:5.17:rc4:*:*:*:*:*:*\",\"matchCriteriaId\":\"B2D2677C-5389-4AE9-869D-0F881E80D923\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:5.17:rc5:*:*:*:*:*:*\",\"matchCriteriaId\":\"EFA3917C-C322-4D92-912D-ECE45B2E7416\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:5.17:rc6:*:*:*:*:*:*\",\"matchCriteriaId\":\"BED18363-5ABC-4639-8BBA-68E771E5BB3F\"}]}]}],\"references\":[{\"url\":\"https://git.kernel.org/stable/c/24888915364cfa410de62d8abb5df95c3b67455d\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/72124e65a70b84e6303a5cd21b0ac1f27d7d61a4\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/9588ac2eddc2f223ebcebf6e9f5caed84d32922b\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/9995b408f17ff8c7f11bc725c8aa225ba3a63b1c\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/9a8736b2da28b24f01707f592ff059b9f90a058c\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/b11781515208dd31fbcd0b664078dce5dc44523f\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/c71bf3229f9e9dd60ba02f5a5be02066edf57012\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/f4c63b24dea9cc2043ff845dcca9aaf8109ea38a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]}]}}",
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2022-48910\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2024-09-10T15:34:04.134343Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2024-09-11T12:42:12.874Z\"}}], \"cna\": {\"title\": \"net: ipv6: ensure we call ipv6_mc_down() at most once\", \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36\", \"lessThan\": \"9a8736b2da28b24f01707f592ff059b9f90a058c\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36\", \"lessThan\": \"c71bf3229f9e9dd60ba02f5a5be02066edf57012\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36\", \"lessThan\": \"24888915364cfa410de62d8abb5df95c3b67455d\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36\", \"lessThan\": \"9588ac2eddc2f223ebcebf6e9f5caed84d32922b\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36\", \"lessThan\": \"f4c63b24dea9cc2043ff845dcca9aaf8109ea38a\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36\", \"lessThan\": \"b11781515208dd31fbcd0b664078dce5dc44523f\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36\", \"lessThan\": \"72124e65a70b84e6303a5cd21b0ac1f27d7d61a4\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3ce62a84d53cd3d3cc5377bbf339e9b08ddf9c36\", \"lessThan\": \"9995b408f17ff8c7f11bc725c8aa225ba3a63b1c\", \"versionType\": \"git\"}], \"programFiles\": [\"net/ipv6/addrconf.c\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"3.18\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"3.18\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"4.9.313\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"4.9.*\"}, {\"status\": \"unaffected\", \"version\": \"4.14.278\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"4.14.*\"}, {\"status\": \"unaffected\", \"version\": \"4.19.323\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"4.19.*\"}, {\"status\": \"unaffected\", \"version\": \"5.4.193\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.4.*\"}, {\"status\": \"unaffected\", \"version\": \"5.10.104\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.10.*\"}, {\"status\": \"unaffected\", \"version\": \"5.15.27\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.15.*\"}, {\"status\": \"unaffected\", \"version\": \"5.16.13\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.16.*\"}, {\"status\": \"unaffected\", \"version\": \"5.17\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"net/ipv6/addrconf.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/9a8736b2da28b24f01707f592ff059b9f90a058c\"}, {\"url\": \"https://git.kernel.org/stable/c/c71bf3229f9e9dd60ba02f5a5be02066edf57012\"}, {\"url\": \"https://git.kernel.org/stable/c/24888915364cfa410de62d8abb5df95c3b67455d\"}, {\"url\": \"https://git.kernel.org/stable/c/9588ac2eddc2f223ebcebf6e9f5caed84d32922b\"}, {\"url\": \"https://git.kernel.org/stable/c/f4c63b24dea9cc2043ff845dcca9aaf8109ea38a\"}, {\"url\": \"https://git.kernel.org/stable/c/b11781515208dd31fbcd0b664078dce5dc44523f\"}, {\"url\": \"https://git.kernel.org/stable/c/72124e65a70b84e6303a5cd21b0ac1f27d7d61a4\"}, {\"url\": \"https://git.kernel.org/stable/c/9995b408f17ff8c7f11bc725c8aa225ba3a63b1c\"}], \"x_generator\": {\"engine\": \"bippy-5f407fcff5a0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nnet: ipv6: ensure we call ipv6_mc_down() at most once\\n\\nThere are two reasons for addrconf_notify() to be called with NETDEV_DOWN:\\neither the network device is actually going down, or IPv6 was disabled\\non the interface.\\n\\nIf either of them stays down while the other is toggled, we repeatedly\\ncall the code for NETDEV_DOWN, including ipv6_mc_down(), while never\\ncalling the corresponding ipv6_mc_up() in between. This will cause a\\nnew entry in idev-\u003emc_tomb to be allocated for each multicast group\\nthe interface is subscribed to, which in turn leaks one struct ifmcaddr6\\nper nontrivial multicast group the interface is subscribed to.\\n\\nThe following reproducer will leak at least $n objects:\\n\\nip addr add ff2e::4242/32 dev eth0 autojoin\\nsysctl -w net.ipv6.conf.eth0.disable_ipv6=1\\nfor i in $(seq 1 $n); do\\n\\tip link set up eth0; ip link set down eth0\\ndone\\n\\nJoining groups with IPV6_ADD_MEMBERSHIP (unprivileged) or setting the\\nsysctl net.ipv6.conf.eth0.forwarding to 1 (=\u003e subscribing to ff02::2)\\ncan also be used to create a nontrivial idev-\u003emc_list, which will the\\nleak objects with the right up-down-sequence.\\n\\nBased on both sources for NETDEV_DOWN events the interface IPv6 state\\nshould be considered:\\n\\n - not ready if the network interface is not ready OR IPv6 is disabled\\n   for it\\n - ready if the network interface is ready AND IPv6 is enabled for it\\n\\nThe functions ipv6_mc_up() and ipv6_down() should only be run when this\\nstate changes.\\n\\nImplement this by remembering when the IPv6 state is ready, and only\\nrun ipv6_mc_down() if it actually changed from ready to not ready.\\n\\nThe other direction (not ready -\u003e ready) already works correctly, as:\\n\\n - the interface notification triggered codepath for NETDEV_UP /\\n   NETDEV_CHANGE returns early if ipv6 is disabled, and\\n - the disable_ipv6=0 triggered codepath skips fully initializing the\\n   interface as long as addrconf_link_ready(dev) returns false\\n - calling ipv6_mc_up() repeatedly does not leak anything\"}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2024-12-19T08:10:19.584Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2022-48910\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2024-12-19T08:10:19.584Z\", \"dateReserved\": \"2024-08-21T06:06:23.293Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2024-08-22T01:30:54.351Z\", \"assignerShortName\": \"Linux\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.1"
    }
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

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.