diff --git a/Gemfile b/Gemfile
index 81294ebe39e9c52afcab880f79c403dc2b77d91d..cd8bdeca8133c8188c817ad2c8c08c2a365832f3 100644
--- a/Gemfile
+++ b/Gemfile
@@ -150,7 +150,7 @@ gem 'deckar01-task_list', '2.3.1'
 gem 'gitlab-markup', '~> 1.7.1'
 gem 'github-markup', '~> 1.7.0', require: 'github/markup'
 gem 'commonmarker', '~> 0.21'
-gem 'kramdown', '~> 2.3.0'
+gem 'kramdown', '~> 2.3.1'
 gem 'RedCloth', '~> 4.3.2'
 gem 'rdoc', '~> 6.1.2'
 gem 'org-ruby', '~> 0.9.12'
diff --git a/Gemfile.lock b/Gemfile.lock
index 063ebc4424bdd19735b1832a8a53bd2810c412c1..6c714c0d5dda35ea649b57797960fda5410d1680 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -669,7 +669,7 @@ GEM
     kgio (2.11.3)
     knapsack (1.17.0)
       rake
-    kramdown (2.3.0)
+    kramdown (2.3.1)
       rexml
     kramdown-parser-gfm (1.1.0)
       kramdown (~> 2.0)
@@ -1471,7 +1471,7 @@ DEPENDENCIES
   jwt (~> 2.1.0)
   kaminari (~> 1.0)
   knapsack (~> 1.17)
-  kramdown (~> 2.3.0)
+  kramdown (~> 2.3.1)
   kubeclient (~> 4.9.1)
   lefthook (~> 0.7)
   letter_opener_web (~> 1.3.4)
diff --git a/changelogs/unreleased/sh-remove-kramdown-patch.yml b/changelogs/unreleased/sh-remove-kramdown-patch.yml
new file mode 100644
index 0000000000000000000000000000000000000000..86fc282d36333ba75536b0214d55afa53febbdb1
--- /dev/null
+++ b/changelogs/unreleased/sh-remove-kramdown-patch.yml
@@ -0,0 +1,5 @@
+---
+title: Remove Kramdown patch and update to v2.3.1 gem
+merge_request: 56917
+author:
+type: fixed
diff --git a/config/initializers/kramdown_patch.rb b/config/initializers/kramdown_patch.rb
deleted file mode 100644
index 5cb769cec242c9841953aeea64757939650d6045..0000000000000000000000000000000000000000
--- a/config/initializers/kramdown_patch.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-#
-# This pulls in https://github.com/gettalong/kramdown/pull/708 for kramdown v2.3.0.
-# Remove this file when that pull request is merged and released.
-require 'kramdown/converter'
-require 'kramdown/converter/syntax_highlighter/rouge'
-
-module Kramdown::Converter::SyntaxHighlighter
-  module Rouge
-    def self.formatter_class(opts = {})
-      case formatter = opts[:formatter]
-      when Class
-        formatter
-      when /\A[[:upper:]][[:alnum:]_]*\z/
-        ::Rouge::Formatters.const_get(formatter, false)
-      else
-        # Available in Rouge 2.0 or later
-        ::Rouge::Formatters::HTMLLegacy
-      end
-    rescue NameError
-      # Fallback to Rouge 1.x
-      ::Rouge::Formatters::HTML
-    end
-  end
-end
diff --git a/spec/initializers/kramdown_patch_spec.rb b/spec/lib/kramdown/kramdown_spec.rb
similarity index 92%
rename from spec/initializers/kramdown_patch_spec.rb
rename to spec/lib/kramdown/kramdown_spec.rb
index 49dda9252bbfa280e37d07d60b40f3c24fd5e045..986a8d9959e1713dee78f1238c56cba6c3de64be 100644
--- a/spec/initializers/kramdown_patch_spec.rb
+++ b/spec/lib/kramdown/kramdown_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-RSpec.describe 'Kramdown patch for syntax highlighting formatters' do
+RSpec.describe 'Ensure kramdown detects invalid syntax highlighting formatters' do
   subject { Kramdown::Document.new(options + "\n" + code).to_html }
 
   let(:code) do