diff --git a/CHANGELOG.md b/CHANGELOG.md
index eb99cb87318807..c30394031a0b8a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -36,7 +36,8 @@ release.
+20.6.1
20.6.0
20.5.1
20.5.0
@@ -43,6 +44,14 @@
* [io.js](CHANGELOG_IOJS.md)
* [Archive](CHANGELOG_ARCHIVE.md)
+
+
+## 2023-09-08, Version 20.6.1 (Current), @RafaelGSS
+
+### Commits
+
+* \[[`8acbe6d8e8`](https://github.com/nodejs/node/commit/8acbe6d8e8)] - **esm**: fix loading of CJS modules from ESM (Antoine du Hamel) [#49500](https://github.com/nodejs/node/pull/49500)
+
## 2023-09-04, Version 20.6.0 (Current), @juanarbol prepared by @UlisesGascon
diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js
index c0125cd84c37c0..80228e895fafcf 100644
--- a/lib/internal/modules/esm/translators.js
+++ b/lib/internal/modules/esm/translators.js
@@ -279,7 +279,8 @@ translators.set('commonjs', async function commonjsStrategy(url, source,
// obtained by calling the monkey-patchable CJS loader.
const cjsLoader = source == null ? (module, source, url, filename) => {
try {
- module.load(filename);
+ assert(module === CJSModule._cache[filename]);
+ CJSModule._load(filename);
} catch (err) {
enrichCJSError(err, source, url);
throw err;
diff --git a/src/node_version.h b/src/node_version.h
index f5c9406d949c86..e9e4ca7520d762 100644
--- a/src/node_version.h
+++ b/src/node_version.h
@@ -29,7 +29,7 @@
#define NODE_VERSION_IS_LTS 0
#define NODE_VERSION_LTS_CODENAME ""
-#define NODE_VERSION_IS_RELEASE 0
+#define NODE_VERSION_IS_RELEASE 1
#ifndef NODE_STRINGIFY
#define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n)
diff --git a/test/es-module/test-esm-recursive-cjs-dependencies.mjs b/test/es-module/test-esm-recursive-cjs-dependencies.mjs
new file mode 100644
index 00000000000000..d75f0fae95df6c
--- /dev/null
+++ b/test/es-module/test-esm-recursive-cjs-dependencies.mjs
@@ -0,0 +1,7 @@
+import '../common/index.mjs';
+import { strictEqual } from 'node:assert';
+
+import '../fixtures/recursive-a.cjs';
+
+strictEqual(global.counter, 1);
+delete global.counter;
diff --git a/test/fixtures/recursive-a.cjs b/test/fixtures/recursive-a.cjs
new file mode 100644
index 00000000000000..a60c0a635ddf6e
--- /dev/null
+++ b/test/fixtures/recursive-a.cjs
@@ -0,0 +1,6 @@
+'use strict';
+
+global.counter ??= 0;
+global.counter++;
+
+require('./recursive-b.cjs');
diff --git a/test/fixtures/recursive-b.cjs b/test/fixtures/recursive-b.cjs
new file mode 100644
index 00000000000000..e9f0b5d0701b69
--- /dev/null
+++ b/test/fixtures/recursive-b.cjs
@@ -0,0 +1,3 @@
+'use strict';
+
+require('./recursive-a.cjs');
|