גוגל העלתה לפרודקשן תו אחד שגוי – והמשתמשים ננעלו מחוץ למחשבים שלהם

אופרטור שגוי אחד ב-++C הצליח לשבור את פונקציית אימות הסיסמה במחשבי הכרומבוק של גוגל

תמונה: גוגל

זה קורה גם לטובים ביותר: בשבוע שעבר גוגל החליטה להעלות לפרודאקשן גירסה חדשה של Chrome OS, מערכת ההפעלה שלה. אבל תו אחד שנפל בדרך הצליח לשבור לחלוטין את הגירסה, ולנעול משתמשים מחוץ למחשבים שלהם עם ברירה אחת: חכו לעדכון שיגיע מתישהו או פרמטו את המחשב.

24 שעות של כאב ראש

בשבוע שעבר גוגל שלחה את עדכון 91.0.4472.165 למערכת ההפעלה Chrome OS, שפועלת על מחשבי הכרומבוקים שהפכו לפופולרים למדי בשנים האחרונות. בין היתר, העדכון החדש תיקן פירצת Zero-Day קריטית למדי. מערכת ההפעלה של גוגל מורידה את העדכונים עבורה ברקע כשאלו זמינים, ומתקינה אותם בפועל כאשר הם מבצעים ריסט למכשיר. מי שעשה זאת בשבוע שעבר, ובמקרה הספיק לתפוס את העדכון הסורר לפני שגוגל משכה אותו בחזרה ממערכת העדכונים, גילה שהוא לא מסוגל להתחבר למשתמש שלו כיוון שמערכת ההפעלה הפסיקה לקבל את הסיסמה הקבועה שלו.

משתמשים רבים החלו לדווח על תקלות דומות, וחלקם אפילו דיווחו כי הלפטופים שלהם החלו להיתקע בבוטלופ, ולמרות שמדובר במערכת הפעלה שהשימוש העיקרי בה מבוסס ענן, משתמשים נוספים טענו כי הם גם איבדו מידע בדרך. המשתמשים שהמחשב שלהם עודכן נאלצו לעמוד בפני 3 ברירות די גרועות שיובילו לאיבוד מידע מקומי: לחזור לגירסה מוקדמת באמצעות USB, למחוק את החשבון הקיים מהמחשב או לבצע פעולת Powerwash, שהיא בעצם פירמוט כולל של המחשב. האפשרות האחרונה הייתה פשוט לחכות עד שגוגל תתקן את הבעיה, רק שעד אז הם לא יוכלו להשתמש במחשב שלהם.

גוגל אכן שיחררה את גירסה 91.0.4472.167, אבל כמו בכל עדכון למערכת הפעלה (או אפילו לדפדפנים), גם העדכון הזה משוחרר בהדרגה ובדרך כלל עוברים מספר ימים עד שעדכון חדש מגיע לכל המשתמשים.

אז איך זה קרה?

אז הסיפור הזה אולי הסתיים בסוף טוב הכל טוב, אבל אנחנו יודעים מה מעניין אתכם באמת: איך זה קרה? ובכן, מכיוון ש-Chrome OS היא מערכת הפעלה בקוד פתוח, אפשר להציץ בשינויי הקוד שלה מגירסה לגירסה. משתמש ברדיט חיטט מעט בקוד וחיפש היכן היה השינוי ששבר את המערכת.

מתברר שהבעיה טמונה ב-Cryptohome VaultKeyset, שהוא החלק שאחראי על מפתחות ההצפנה. Chrome OS נכתבה בשפת ++C, שבה בשביל להשתמש באופרטור AND ולקצר תהליכים, כלומר שלא תתבצע בדיקה נוספת של שאר התנאים, אם תנאי אחד לא מתקיים, היה צורך להשתמש ב-&&. אחד המפתחים השתמש רק ב-& אחת, וכתוצאה מזה, התקבלה שגיאה בתהליך בדיקת הסיסמה שהוזנה אל מול זו שמוצפנת במערכת, גם אם המשתמש הזין את הסיסמה הנכונה.

if (key_data_.has_value() && !key_data_->label().empty()) {
if (key_data_.has_value() & !key_data_->label().empty()) {

מה שטרם ברור הוא איך העדכון הסורר הצליח לעבור את עורך הקוד, ה-QA ו-3 שלבי הבדיקות הפנימיים של גוגל שכוללים את שלב ה-Canary, שלב ה-Dev וכמובן שלב ה-Beta, שאמורים להיות במרווחים של שבועות האחד מהשני לפני שהם מגיעים למשתמשי הקצה. אגב, זוהי לא התקלה הראשונה בגירסה 91 שמחרבת לאנשים את השימוש במחשב: בתחילת החודש גוגל שלחה עדכון שהוביל לשימוש מוגזם במעבד (שגם ככה לא עוצמתי במיוחד במחשבי הכרומבוק) והוביל לכך שחלק מהמשתמשים פשוט לא יכלו להשתמש במחשב שלהם עד שגוגל עידכנה שוב את מערכת ההפעלה ותיקנה את הבעיה.

פנקו את הטלגרם שלכם עם ערוץ הטכנולוגיה הגדול בארץ פנקו את הטלגרם שלכם עם ערוץ הטכנולוגיה הגדול בארץ הצטרפו לערוץ גיקטיים בטלגרם

עידן בן טובים

נולד עם ג׳ויסטיק ביד. יש לו הרבה יותר מדי גאדג׳טים והרבה פחות מדי זמן פנוי כדי לשחק עם כולם. בעל פטיש לא מוסבר לביצוע קליברציות לסוללות של מכשירים. כשהוא לא עסוק בלכתוב על טכנולוגיה, הוא אוהב לדבר עליה, והרבה

הגב

16 תגובות על "גוגל העלתה לפרודקשן תו אחד שגוי – והמשתמשים ננעלו מחוץ למחשבים שלהם"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

* היי, אנחנו אוהבים תגובות!
תיקונים, תגובות קוטלות וכמובן תגובות מפרגנות - בכיף.
חופש הביטוי הוא ערך עליון, אבל לא נוכל להשלים עם תגובות שכוללות הסתה, הוצאת דיבה, תגובות שכוללות מידע המפר את תנאי השימוש של Geektime, תגובות שחורגות מהטעם הטוב ותגובות שהן בניגוד לדין. תגובות כאלו יימחקו מייד.

סידור לפי:   חדש | ישן | הכי מדורגים
בצל כחול
Guest

אני לא מפתח אבל שפת C++ היא שפה מקומפלת לא?
הקומפיילר לא אמור לזהות שגיאת הסינטקס הזאת?

א אא
Guest

ל & אחד יש משמעות , אבל לא למה שניסו לעשות

בצל כחול
Guest

אוקי תודה.

John
Guest

זאת ממש לא שגיאת סינטקס, זו שגיאה לוגית של המתכנת

מתכנת
Guest

זו לא שגיאת סינטקס, אלא שגיאה לוגית, שהקומפיילר לא אמור לתפוס

באג 2000
Guest

שוב גייקטיים לא לגמרי מבינים על מה שהם כותבים.
הקוד דווקא תקין לוגית. אין בעיה להשתמש באופרטור בינארי (&) על שני בוליאנים (שני התנאים שב-if).
במקרה הזה הסתמכו על short-circuit evaluation (אם החלק הראשון לא מתקיים, אל תבדוק את החלק השי כי התשובה כבר ידועה) של האופרטור הבוליאני (נפוץ מאוד על מנת לבדוק תנאי מסויים לפני גישה למשהו שתלוי בו), אבל אופרטור כזה לא קיים כאן, ולכן גרמו לתכנית לעוף על גישה לזיכרון לא מאותחל (()label).

באג 1999
Guest

מדויק

בנון
Guest

אם רק היו משתמשים במיל and השמורה בשפה במקום בשני &…

ASD
Guest

אבל זה כזה לא מגניב להשתמש ב-3 תווים במקום תו אחד שרק המאגניבים מבינים

יוכי
Guest

האופרטור הסורר נקרא bitwise and
והוא משמש להשוואת ביטים
דרך אגב 3 שלבי הבדיקות הפנימיים בחברות רציניות (גם בגוגל) הם ממש לא מה שציינתם אלא dev, staging, prod וממש לא שבועות ביניהם…
(Canary זו השוואה ל build הקודם ממש לפני השחרור ל prod)
עדכון אבטחה zero-day לא משוחרר כ Beta אלא משוחרר במהירות האפשרית, לפעמים זה נשבר…

סטארטאפיסט
Guest

יותר מעניין למצוא את הunit test שבודק את זה.

John
Guest

גם אני לעיתים מתבלבל בC#/++C, אבל הכי מובן זה בvisual basic
&&=AndAlso
&=And

פולי
Guest

למיקרוסופט זה לא קרה עד היום

מוש
Guest

זה מה שקורה כשקריטריון מרכזי לקבלה הוא להיות צעיר ומגניב.
מתכנת מבוגר ומנוסה לא היה נופל על דבר כל כל פשוט שמקורו בחוסר ניסיון.
אבל גוגל לא יכולים לדעת זאת כי הם כלל לא קראו לו לראיון.

אורי
Guest

קקות. גם פירמטתי וגם החלפתי סיסמא לגוגל. מישהו יפצה אותי? בחיים לא..

סיגל
Guest

איזה QA? לגוגל אין QA והם גאים בזה.
המשתמשים עצמם הם הQA שלהם.

wpDiscuz

תגיות לכתבה: