VYPR
High severityCISA KEVNVD Advisory· Published Sep 28, 2023· Updated Oct 21, 2025

CVE-2023-5217

CVE-2023-5217

Description

Heap buffer overflow in vp8 encoding in libvpx in Google Chrome prior to 117.0.5938.132 and libvpx 1.13.1 allowed a remote attacker to potentially exploit heap corruption via a crafted HTML page. (Chromium security severity: High)

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
electronnpm
< 22.3.2522.3.25
electronnpm
>= 24.0.0, < 24.8.524.8.5
electronnpm
>= 25.0.0, < 25.8.425.8.4
electronnpm
>= 26.0.0, < 26.2.426.2.4
electronnpm
>= 27.0.0-alpha.1, < 27.0.0-beta.827.0.0-beta.8

Affected products

2
  • Range: 117.0.5938.132
  • Google/libvpxv5
    Range: 1.13.1

Patches

2
3fbd1dca6a4d

VP8: disallow thread count changes

https://github.com/webmproject/libvpxJames ZernSep 26, 2023via ghsa
2 files changed · +5 4
  • test/encode_api_test.cc+0 4 modified
    @@ -370,10 +370,6 @@ TEST(EncodeAPI, ConfigResizeChangeThreadCount) {
     
       for (const auto *iface : kCodecIfaces) {
         SCOPED_TRACE(vpx_codec_iface_name(iface));
    -    if (!IsVP9(iface)) {
    -      GTEST_SKIP() << "TODO(https://crbug.com/1486441) remove this condition "
    -                      "after VP8 is fixed.";
    -    }
         for (int i = 0; i < (IsVP9(iface) ? 2 : 1); ++i) {
           vpx_codec_enc_cfg_t cfg = {};
           struct Encoder {
    
  • vp8/encoder/onyx_if.c+5 0 modified
    @@ -1447,6 +1447,11 @@ void vp8_change_config(VP8_COMP *cpi, VP8_CONFIG *oxcf) {
       last_h = cpi->oxcf.Height;
       prev_number_of_layers = cpi->oxcf.number_of_layers;
     
    +  if (cpi->initial_width) {
    +    // TODO(https://crbug.com/1486441): Allow changing thread counts; the
    +    // allocation is done once in vp8_create_compressor().
    +    oxcf->multi_threaded = cpi->oxcf.multi_threaded;
    +  }
       cpi->oxcf = *oxcf;
     
       switch (cpi->oxcf.Mode) {
    
af6dedd715f4

encode_api_test: add ConfigResizeChangeThreadCount

https://github.com/webmproject/libvpxJames ZernSep 26, 2023via ghsa
1 file changed · +49 1
  • test/encode_api_test.cc+49 1 modified
    @@ -308,7 +308,6 @@ TEST(EncodeAPI, SetRoi) {
     
     void InitCodec(const vpx_codec_iface_t &iface, int width, int height,
                    vpx_codec_ctx_t *enc, vpx_codec_enc_cfg_t *cfg) {
    -  ASSERT_EQ(vpx_codec_enc_config_default(&iface, cfg, 0), VPX_CODEC_OK);
       cfg->g_w = width;
       cfg->g_h = height;
       cfg->g_lag_in_frames = 0;
    @@ -346,6 +345,7 @@ TEST(EncodeAPI, ConfigChangeThreadCount) {
             vpx_codec_ctx_t ctx = {};
           } enc;
     
    +      ASSERT_EQ(vpx_codec_enc_config_default(iface, &cfg, 0), VPX_CODEC_OK);
           EXPECT_NO_FATAL_FAILURE(
               InitCodec(*iface, kWidth, kHeight, &enc.ctx, &cfg));
           if (IsVP9(iface)) {
    @@ -364,6 +364,54 @@ TEST(EncodeAPI, ConfigChangeThreadCount) {
       }
     }
     
    +TEST(EncodeAPI, ConfigResizeChangeThreadCount) {
    +  constexpr int kInitWidth = 1024;
    +  constexpr int kInitHeight = 1024;
    +
    +  for (const auto *iface : kCodecIfaces) {
    +    SCOPED_TRACE(vpx_codec_iface_name(iface));
    +    if (!IsVP9(iface)) {
    +      GTEST_SKIP() << "TODO(https://crbug.com/1486441) remove this condition "
    +                      "after VP8 is fixed.";
    +    }
    +    for (int i = 0; i < (IsVP9(iface) ? 2 : 1); ++i) {
    +      vpx_codec_enc_cfg_t cfg = {};
    +      struct Encoder {
    +        ~Encoder() { EXPECT_EQ(vpx_codec_destroy(&ctx), VPX_CODEC_OK); }
    +        vpx_codec_ctx_t ctx = {};
    +      } enc;
    +
    +      ASSERT_EQ(vpx_codec_enc_config_default(iface, &cfg, 0), VPX_CODEC_OK);
    +      // Start in threaded mode to ensure resolution and thread related
    +      // allocations are updated correctly across changes in resolution and
    +      // thread counts. See https://crbug.com/1486441.
    +      cfg.g_threads = 4;
    +      EXPECT_NO_FATAL_FAILURE(
    +          InitCodec(*iface, kInitWidth, kInitHeight, &enc.ctx, &cfg));
    +      if (IsVP9(iface)) {
    +        EXPECT_EQ(vpx_codec_control_(&enc.ctx, VP9E_SET_TILE_COLUMNS, 6),
    +                  VPX_CODEC_OK);
    +        EXPECT_EQ(vpx_codec_control_(&enc.ctx, VP9E_SET_ROW_MT, i),
    +                  VPX_CODEC_OK);
    +      }
    +
    +      cfg.g_w = 1000;
    +      cfg.g_h = 608;
    +      EXPECT_EQ(vpx_codec_enc_config_set(&enc.ctx, &cfg), VPX_CODEC_OK)
    +          << vpx_codec_error_detail(&enc.ctx);
    +
    +      cfg.g_w = 16;
    +      cfg.g_h = 720;
    +
    +      for (const auto threads : { 1, 4, 8, 6, 2, 1 }) {
    +        cfg.g_threads = threads;
    +        EXPECT_NO_FATAL_FAILURE(EncodeWithConfig(cfg, &enc.ctx))
    +            << "iteration: " << i << " threads: " << threads;
    +      }
    +    }
    +  }
    +}
    +
     #if CONFIG_VP9_ENCODER
     class EncodeApiGetTplStatsTest
         : public ::libvpx_test::EncoderTest,
    

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

73

News mentions

0

No linked articles in our index yet.