ב-30 בנובמבר אישר סטלין את תוכנית התקפת הנגד והפקיד את הגנרל ז'וקוב, שכבר הוכרז כגיבור ברית המועצות על ניצחונותיו ב-1939 מול יפן בקרב חלקין גול, להוביל את המתקפה. כבר באמצע נובמבר 1941 פתח הצבא האדום במתקפות נגד על האגפים עם יעדים מצומצמים. עם זאת, אלו נועדו בעיקר לכיבוש מחדש של נקודות חשובות מבחינה אסטרטגית ולא חלק ממתקפה גדולה על פני החזית להשמדת הכוחות הגרמנים. כתוצאה ממתקפות הנגד הסובייטיות הראשונות הללו, פונתה רוסטוב על הדון על ידי ארמיית הפאנצר הראשונה וטיכווין ננטשה על ידי הארמייה 16 בכוח. התקפת הנגד הסובייטית חזתה תחילה כיתור, ניתוק והשמדת היחידות הגרמניות של קבוצות הפאנצר 3 ו-4, שהיו המסוכנות ביותר עבור מוסקבה. לאחר מכן, היו עתידים להתבצע מבצעים וקרבות כיתור הרחק מערבה, שהיו אמורות לחסל את כל קבוצת ארמיות מרכז, בעוד התקפות משבשות המתרחשות במקביל על שאר חלקי החזית בצפון ובדרום נועדו למנוע מהעתודות הגרמניות לתגבר את הגזרה המרכזית. הפיקוד העליון הסובייטי סיפק כ-1,060,000 איש, כמעט 700 טנקים וכוחות ארטילריה חזקים מהעתודה האסטרטגית. חילות האוויר הסובייטיים יכלו להשתמש בכמעט 1,400 מטוסים לשם כך.
התקפות של החזית המערבית וקלינין.
יום אחד לפני תחילת המתקפה הגדולה של חזית קלינין והחזית המערבית ב-5 בדצמבר, מחלקת "צבאות זרים מזרח" במטכ"ל הגרמני העריכה את המצב כך שהחיילים הסובייטים "כרגע" לא יכולים לתקוף באזור מבלי להביא תגבורת משמעותית. למעשה, הסטבקה תגברה את חזיתות קלינין והמערבית ל-106 דיוויזיות, כולל 21 דיוויזיות עילית טריות מסיביר. פילדמרשל פון בוק יכול היה להתנגד לאלה רק עם 68 דיוויזיות שחוקות בעיקר, ויחס החיילים היה כעת 1.5:1 לטובת הצבא האדום. גם באוויר הצליח חיל האוויר הסובייטי להגיע לעליונות ברורה עם 1,370 מטוסים לעומת כ-550 מטוסים גרמנים.
במהלך הסתיו שינע הפיקוד הסובייטי העליון 40 דיווזיות רעננות ומצוידות היטב מסיביר והמזרח הרחוק למערב ברית המועצות, אך שמר את רובן בעתודת הסטאבקה לצורך מתקפת-הנגד. העברת הכוחות התאפשרה, לאחר שהמרגל הסובייטי ריכרד זורגה העביר מידע מודיעיני מיפן לפיו האימפריה היפנית, שהובסה על ידי ז'וקוב בקרב חלקין גול באוגוסט 1939, לא מתכוונת לתקוף שוב את ברית המועצות. הכוחות שהועברו מהמזרח הרחוק היוו רק חלק קטן מכוחות העתודה, שהפיקוד הסובייטי הצליח להכין ולאמן במהלך החודשים האחרונים של שנת 1941 לקראת פתיחת מתקפת הנגד באזור מוסקבה.
עתה, כאשר האויב היה קרוב למוסקבה אם אי-אפשר היה להתעלם ממנה, הטיל ז'וקוב את הכוחות שנשמרו בעתודה למערכה, בסיוע טנקי T-34 חדישים ומשגרי רקטות קטיושה. כוחות העתודה הסובייטים היו מצוידים היטב ללוחמת חורף, וכללו בין השאר גם מספר גדודי סקי.
ההתקפות החזקות באופן בלתי צפוי על הקטעים הקדמיים שנכבשו על ידי הארמייה ה-9 ועל ידי קבוצות הפאנצר 3 ו-4 החלו ב-5 בדצמבר 1941. ההתקפה הסובייטית העיקרית הייתה בצפון משני צידי סכר הוולגה עם התקפה דרום-מערבית על קלין אותה הובילה חזית קלינין בפיקודו של קונייב. החזית המערבית בפיקודו של ז'וקוב ביצעה התקפות חזיתיות משני צידי הכביש מוסקבה-סמולנסק ממערב. הארמייה ה-30 (לליושנקו) הייתה אמורה להביס את האויב באזור רוגאצ'בו-בורשצ'בו ויחד עם ארמיית ההלם הראשונה להתקדם דרך גזרת רשתניקו-קלין לקו קוסטליאקובו ולוטוסקינו. ארמיית ההלם הראשונה (קוזנצוב) נאלצה להשמיד את חלקי קבוצת הפאנצר הגרמנית השלישית שהתקדמה דרך תעלת וולגה-מושבה, לאחר מכן להתרכז באזור דמירוב-יכרומה ויחד עם הארמיות ה-30 וה-20 (ולאסוב) כדי להמשיך דרך קלין לטריאייבה סלובודה. דרומית לכך אמורה הייתה להתקדם הארמייה החמישית (גובורוב) מאזור פוליאנה קרסניה, יחד עם האגף הימני של הארמייה ה-16, ולתקוף לעבר סולנצ'נוגורסק. האגף השמאלי של הארמייה ה-16 (רוקוסובסקי) נאלץ לפרוץ דרך קריוקובו באיסטרה. הארמיות ה-5, ה-33, ה-43 וה-49, שהיו באמצע החזית המערבית, היו חלשות מכדי לתקוף ונאלצו רק לרתק את האויב (הארמייה הרביעית הגרמנית). הארמייה ה-50 (בולדין), שעדיין נלחמת בהגנה באזור טולה, הייתה אמורה לפתוח בהתקפת נגד לכיוון בולוחובו ושצ'קינו. קבוצת הפרשים בלוב הייתה אמורה לתקוף דרך Wenew לכיוון סטלינוגורסק ודדילובו, בעוד שהארמייה ה-10 שזה עתה הובאה (גוליקוב) הייתה אמורה לתקוף לאורך קו Serebrjanje Prudy-Mikhailov בין אוסלוביה לבוגורודיזק ולהתקדם מדרום לנהר Upa. בליל 5 בדצמבר נחתו 416 צנחנים סובייטים ליד העיירה יוכנוב והיו אמורים לאבטח את שדה התעופה שם, במקביל, הפרטיזנים הסובייטים בעורף השמידו את פסי הרכבת הבודדים ואת פסי הרכבת השמישים שנסללו מחדש על ידי כוחות הנדסה גרמנים לתקן אירופאי או כבשו מעברי כביש חשובים. ארמיית הפאנצר השנייה, שהותקפה על ידי הארמייה ה-10 הסובייטית וקורפוס הפרשים של המשמר ה-1 ליד ווינו ומיכאילוב, נאלצה להפסיק את ההתקפה האחרונה שלה על טולה ולוותר על הקו הקדמי שם. דרומה יותר, ב-6 בדצמבר, תקפה גם הארמייה ה-13 (גורודנינסקי) של החזית הדרום-מערבית (טימושנקו) וכבשה את יילץ, תוך שהיא פורצת בחזית הקורפוס הגרמני ה-34.
בשל מתקפת הנגד הסובייטית הכללית ועתודות האויב שהתגלו, הפסקת המתקפה הגרמנית והנסיגה המסודרת לעמדת חורף נוחה מבחינה מבצעית נראו הכרחיים בדחיפות. בעיות נוספות היו הירידה ביעילות הלחימה, המצב הרעוע בכל הנוגע להחלפת הכוחות והתשישות הקיצונית של החיילים, שהצריכה החלטה מהירה. זה הביא להכרזה על קו הנסיגה החדש של הארמייה הרביעית וקבוצות הפאנצר על ידי הפיקוד של קבוצת ארמיות מרכז. תוכנן כי לאחר פקודה מיוחדת תוכל להתחיל הנסיגה ב-6 בדצמבר, שתארך על פי האומדן כשני לילות. התאריך האחרון לתחילת הנסיגה היה קשור בהסכמתו של היטלר והוראה חדשה להפעיל אותה. עם זאת, המצב הבעייתי שרר כי לרוב יחידות קבוצת ארמיות מרכז לא היו חיילים או משאבים זמינים שהיו מאפשרים לבנות עמדה שתוכל להדוף התקדמות סובייטית או מתקפה גדולה. כתוצאה מעובדה זו, מפקד קבוצת ארמיות מרכז, פדור פון בוק, הגיע למסקנה שנסיגה בקנה מידה גדול לעמדות מפותחות לא הייתה אפשרית ולכן האפשרות היחידה שנותרה הייתה פקודת עצירה. הדרישה הבסיסית להחלטה זו הייתה חידוש מיידי של הכוחות באמצעות אספקת מחליפים חדשים ליחידות.
בתחילת המתקפה הסובייטית הגדולה, העדיפות העליונה של ההנהגה הצבאית הגרמנית הייתה למנוע מהצבא האדום לפרוץ, ולכן נאסר על כל היחידות להימנע ממגע עם מהאויב. הכוחות הסובייטים היו ערוכים היטב לחורף ולרשותם יחידות סקי ונעלי שלג, שאפשרו לחיל הרגלים לנוע בחופשיות בשטח מכוסה שלג עמוק. בנוסף, הצבא האדום היה מצויד בטנקים ה-T-34 החדשים, שהיו עדיפים על דגמי הטנקים הגרמניים במובנים רבים ואשר נגדו לא הייתה לוורמאכט הגנה אפקטיבית נגד טנקים. פיקוד קבוצת הארמיות הגרמנית הגיב בהיסוס למתקפה הסובייטית עד שהכיר בה כמתקפה גדולה. רק בערב 6 בדצמבר הם הורו לעצור את ההתקפה על מוסקבה ולהגן על העמדות הראשוניות.
ב-7 בדצמבר התבשרה האוכלוסייה הסובייטית לראשונה על ידי משרד הסובינפורם על המתקפה נגד "החיילים הגרמנים-פשיסטים", שספגו אבדות כבדות בזמן שהכוחות שלהם התקדמו. באותו יום, חילות האוויר היפניים ביצעו את המתקפה על פרל הארבור, ופגעו קשות בצי האוקיינוס השקט האמריקאי שעגן בפרל הארבור. למחרת, 8 בדצמבר 1941, ארצות הברית נכנסה למלחמה.
בלילות החל מ-7/8 בדצמבר נפרסו גדודי קוזקים סובייטיים במספרים גדולים מאחורי החזית. הם פשטו על מחסני אספקה, ציוד ומטות עורפיים, וגרמו לבלבול מסוים. יומיים לאחר מכן, קבוצת ארמיות מרכז הורתה על נסיגה כללית לעמדת החורף. ב-11 בדצמבר הכריזו גרמניה ואיטליה מלחמה על ארצות הברית.
באמצע דצמבר היה הפיקוד העליון הגרמני בפאניקה מוחלטת. המפקדים הבכירים של קבוצת ארמיות מרכז הגרמנית דרשו נסיגה מיידית חזרה לאזור סמולנסק כדי להציל את כוחותיהם מהתמוטטות והשמדה. אולם היטלר לקח לידו באופן אישי את הפיקוד על הצבא הגרמני בחזית המזרחית, ולא התיר נסיגה כללית מאזור מוסקבה, תוך שהוא מורה לכוחות הגרמנים שלא לוותר על אף שעל אדמה. פקודה זו תרמה לייצובה של החזית הגרמנית ולהאטת קצב ההתקדמות של כוחות הצבא האדום. בראשית שנת 1942 נבלמה מתקפת הנגד הסובייטית כמעט בכל הגזרות והכוחות התוקפים ספגו אבדות כבדות. בלימת מתקפת הנגד הסובייטית איפשרה להיטלר לטעון, שהנחישות שלו היא שהצילה את הוורמאכט מכליה.
ב-16 בדצמבר שוחררה קלינין על ידי שתי דיוויזיות של הארמייה ה-29 (גנרל שבצוב) בשיתוף עם דיוויזיית הרובאים ה-256 של הארמייה ה-31. ב-19 בדצמבר פיטר היטלר את פון בראוכיטש וקיבל בעצמו את הפיקוד על הצבא. ב-21 בדצמבר, הצבא האדום ניסה לכבוש את קלוגה והחלו שלושה ימים של קרבות רחוב. ב-25 בדצמבר הצליח הצבא האדום לשחרר את איסטרה, רוסה ו-וולוקולמסק. גנרל אוברסט גודריאן הסיג את חייליו נגד פקודות מפורשות לעצור, ולכן שוחרר מתפקידו ונשלח לעתודת הפיקוד העליון, ואילו ארמיית הפאנצר השנייה הוכפפה לגנרל חיל השריון רודולף שמידט.
ב-30 בדצמבר קלוגה נפלה שוב לידיים הסובייטיות, וב-7 בינואר הם כבשו בחזרה את מוז'איסק. ב-8 בינואר נאלץ אריך הפנר להסיג את חייליו כדי להימלט מהכיתור הממשמש ובא. גם כאן הנסיגה הייתה למרות הוראת עצירה קפדנית מ-OKH. מכיוון ש"מרידות" כאלה הפכו תכופות יותר, היטלר עשה דוגמה מהפנר בכך שהרחיק אותו מתפקידו וגירש אותו ללא כבוד מהוורמאכט. מאותו יום ואילך, ועד תום המלחמה, כל הוראה לנסיגה הייתה צריכה להיות מאושרת אישית על ידי היטלר.