יצירת קבוצת משתמש נפרדת לעריכת קובצי CSS/JS של האתר

This page is a translated version of the page Creation of separate user group for editing sitewide CSS/JS and the translation is 100% complete.
Tracked in Phabricator:
Task T190015

הבעיה

למפעילי המערכת יש כוח מסוכן מאוד: באמצעות עריכת דפים כמו Common.js הם יכולים באופן מיידי להריץ קוד על המכשירים של מיליוני הקוראים שלנו ושל אלפי העורכים שלנו. (אותו הדבר חל לגבי קבוצות משתמש אחרות עם הרשאות דומות, למשל עורכי ממשק.) אף־על־פי שהדבר ידוע, מעט אנשים מבינים את חומרת הסכנה:

  • באמצעות שליחת קוד זדוני לקוראים ולעורכים, ניתן בעיקרון לעשות הכול: לגנוב סיסמאות או מספרי כרטיסי אשראי, לסלף תרומות, לבטל את האנונימיות של העורכים, לבצע עריכות בשמו של משתמש אחר, לגרום לאנשים להתקין תוכנות זדוניות, לשלוח ספאם, להפיץ מתקפות DDoS נגד אתרי צד־שלישי ועוד.
  • בניגוד להרשאות מסוכנות אחרות (כמו הרשאת "בודקים"), שלא ניתן לנצלן כדי לגנוב כספים, כאן מדובר ביעד משתלם עבור התוקף. לאחרונה ראינו מישהו שהשתמש לרעה בהרשאותיו כדי להריץ כורי מטבעות מבוזרים במכשירים של המבקרים באתר; ישנן עוד פרצות רבות הקוראות לגנב.
  • הנזק לא מוגבל לאתר ויקי אחד: מאחר שכל אתרי ויקימדיה משתמשים במערכת כניסה לחשבון גלובלית אחת, ניצול לרעה של ההרשאות הללו באתר ויקי אחד יכול לשמש להשתלטות על חשבונות של מפעילי מערכת בכל אתר ויקי אחר ולהרחיב את המתקפה.

משכך, האקרים שיכולים לפרוץ לחשבונות של מפעילי מערכת מהווים איום רציני, ועלינו לעשות כל שביכולתנו כדי לצמצם את הסיכון. למרבה המזל, לא קרה אף מקרה רציני עד כה, אם כי חשבונות של מפעילי מערכת נפרצים באופן קבוע; עלינו להפסיק להסתמך על המזל.

באותו זמן, היכולת של הקהילות באתרי ויקימדיה להתאים אישית את סביבת העבודה באתריהם היא בעלת ערך רב ויש להמשיך לאפשרה. גאדג'טים העומדים לרשות העורכים מעניקים תועלת משמעותית ופרודוקטיבית; שינויים טכניים שנעשים עבור הקוראים מאפשרים לפתור בעיות רבות במאות אתרי הוויקי של ויקימדיה שטרם נפתרו בתהליך הפיתוח המרוכז; היכולת לפתור בעיות באופן מקומי במקום להסתמך על עזרה חיצונית היא מקור חשוב להעצמה ולמוטיבציה עבור קהילת הוויקי. השליטה בסביבת ה־CSS/JS המקומית צריכה להישאר בידי הקהילה המקומית.

הפתרון

רוב מפעילי המערכת למעשה לא חפצים ביכולת לערוך קובצי CSS ו־JavaScript ולא זקוקים לה. בראש ובראשונה, עריכות בקבצים כאלה דורשות ידע של השפות הללו, ולרוב מפעילי המערכת אין את הידע הזה. אנשים שכבר עוסקים בעריכת קוד ה־JavaScript וה־CSS של האתר (או שמתכוונים להתחיל לעסוק בזה) לא אמורים להיות מושפעים מהשינוי, אבל אין להעניק את ההרשאה למפעילי מערכת שלא עוסקים בתחום הזה, וזאת כדי להבטיח שאם תוקף יפרוץ לחשבון שלהם – הוא לא יוכל להזיק בצורה משמעותית. כמו־כן, התוכנה צריכה לתמוך בקהילות שמעוניינות בבקרה גבוהה יותר על עורכי JS מאשר על מפעילי מערכת (באופן כללי, זהו דבר חכם לעשות).

כדי לאפשר זאת, ניצור קבוצת משתמשים חדשה בשם "מפעילי מערכת טכניים", ורק משתמשים בקבוצה הזו יוכלו לערוך את דפי ה־CSS וה־JS של האתר. כברירת מחדל, ביורוקרטים ודיילים יוכלו להעניק את ההרשאה למשתמשים, באותו האופן שהם מעניקים הרשאות מפעיל מערכת. אופן המינוי של מפעילי המערכת הטכניים החדשים ייקבע לפי שיקול הדעת של כל קהילה מקומית (או לפי קהילת ויקימדיה הגלובלית במקרה שהקהילה מנהיגה מדיניות גלובלית באמצעים הרגילים).

לשינוי הזה יהיו מספר יתרונות:

  • מספר החשבונות שיוכלו להזיק לאתר ידעך בצורה משמעותית.[1] צמצום מספר החשבונות שיכולים לשמש כמתקפה זדונית משמעו סיכון קטן יותר לפגיעה בחשבון במקרה שבסיס הנתונים של הסיסמאות באתרי צד־שלישי נפרץ. (זה גם אומר שמפעילי מערכת רגילים יכולים לדאוג פחות מהפיכתם ליעד מבוקש בקרב גונבי החשבונות.) כמו־כן, יהיה קל יותר לעקוב אחרי ניסיונות כניסה כושלים למספר קטן יותר של חשבונות.
  • מעבר למספר החשבונות, החשבונות הפגיעים ביותר יפסיקו להיות יעדים של התקפה. למשתמשים שיכולים לכתוב קוד CSS/JS, בדרך כלל יש מיומנויות טכנולוגיית מידע טובים יותר באופן כללי, ולכן ססמאות טובות יותר והתנהגות טובה יותר בנושא האבטחה.
  • בעתיד נוכל לקבוע דרישות אבטחה גבוהות יותר עבור עורכי CSS/JS (כגון דרישה לאימות דו-שלבי), מבלי להפריע לכל מנהלי המערכת האחרים, שפרוצה לחשבונות שלהם לא תהווה סכנה גדולה.

ברמה הטכנית: יתווספו שתי הרשאות חדשות לתוכנת מדיה־ויקי (editsitecss ו־editsitejs); כדי לערוך דפי .css ודפי .js במרחב מדיה־ויקי, יהיה צורך להחזיק הן בהרשאה הישנה editinterface והן בהרשאות החדשות editsitecss ו־editsitejs. מפעילי מערכת וקבוצות משתמש אחרות שכרגע מחזיקים בהרשאה editinterface יקבלו את שתי ההרשאות החדשות לתקופת מעבר קצרה (כדי שהשינוי בהרשאות יוכל להתבצע בלי הפרעות), אך בסופו של דבר הם לא יחזיקו בהרשאות הללו, והתוכנה לא תאפשר לאף קבוצה להחזיק בהן פרט למפעילי המערכת הטכניים.

איך אפשר לעזור

  • לאחר ששלב ההתייעצות הנוכחי יסתיים, תהיה תקופת מעבר (כנראה שבועיים) שבה קבוצת מפעילי המערכת הטכניים תתקיים, אך מפעילי מערכת רגילים עדיין יוכלו לערוך קובצי CSS/JS. אנא ודאו שהקהילה שלכם מודעת לכך, כדי שהיא תוכל להוסיף אנשים לקבוצת מפעילי המערכת הטכניים בזמן הזה, וכדי שהיא תקיים דיון שבו יוחלט מי יקבל את ההרשאה. (כל קהילה מקומית יכולה להחליט בעצמה מה לעשות בתקופת המעבר; אפשר פשוט להעניק את ההרשאה לכל מפעיל מערכת שמבקש אותה.)
  • כמו־כן, אנא ודאו שהוויקי שלכם מקיימת דיונים ובחירות באשר לקבוצת המשתמשים החדשה בזמן תקופת המעבר. כאמור, הקהילה יכולה גם להחליט לשאול את מפעילי המערכת החדשים האם הם מעוניינים להיות גם מפעילי מערכת טכניים והאם יש להם היכרות עם Javascript והרגלי התנהגות אבטחה בסיסיות. בכל מקרה, מומלץ שהרף למינוי מפעילי מערכת טכניים יהיה גבוה לפחות כמו הרף למינוי מפעילי מערכת (מבחינת האמון במשתמש ובפועלו), ואולי אף גבוה יותר (ראו את דף קבוצת המשתמש לעצות נוספות).
  • ספרו לנו על עבודות טכניות שדורשות הרשאות נוספות מעבר לעריכת דפי CSS/JavaScript (הדבר יעזור להחליט מהן ההרשאות שמפעילי המערכת הטכניים צריכים להחזיק בהן כברירת מחדל). למשל, האם יש להעניק למפעילי המערכת הטכניים את היכולת למחוק דפים, או לשנות את מודל התוכן שלהם?
  • הציעו שם טוב יותר לקבוצת המשתמשים הזו! השם "מפעילי מערכת טכניים" לא כל־כך טוב. מספר דברים שצריך לקחת בחשבון: יש למנוע בלבול בין משתמשים בקבוצה החדשה הזו לבין מפתחים שמתחזקים את קוד המקור של התוכנה מחוץ לאתרי הוויקי (מפתחי מדיה־ויקי, מתחזקי הכלים של "Toolforge" וכדומה). בנוסף, יש למנוע בלבול בין משתמשים בקבוצה החדשה הזו לבין אנשים שעוסקים בתחזוקת קוד Lua (במרחב השם "יחידה"). זאת ועוד, קבוצת "עורכי הממשק" תמשיך להתקיים (לצורך עריכת הודעות מערכת במרחב מדיה־ויקי). רצוי ששם הקבוצה החדשה יבהיר שהתפקיד הזה דורש אמון לפחות כמו שתפקיד מפעילי המערכת דורש אמון.
  • אם אתם מוצאים בעיות שאינן רשומות במסמך זה, או אם אתם סבורים שיש צורך בשינויים נוספים שיהפכו את המהלך לשימושי יותר ו/או למעיק פחות, אנא אמרו לנו!

אנא השתמשו בדף השיחה לשליחת משוב. ניתן לכתוב בכל שפה.

שאלות נפוצות

מי עומד מאחורי המסמך הזה?
הדף הזה ושינוי הקוד התואם לו נכתבו בידי משתמש:Tgr (בהיותו מתנדב). בהתבסס על T190015 ועל רשימת נתפוצה wikitech-l, אני מאמין שיש להם קונסנזוס של קהילת מפתחי קרן מדיה ויקי.
האם זו בקשה לתמיכה בשינוי?
לא במובן שהשינוי יבוצע או לא יבוצע בהתבסס על הקונצנזוס של הקהילה. זוהי אינה הצבעה. החלטות באשר לאבטחת התוכנה מתקבלות בהתאם לקונצנזוס של קהילת מפתחי מדיה־ויקי, ולא בהתאם לקונצנזוס של העורכים; ההחלטה הסופית תתקבל לאחר בדיקת הקוד, כמו תמיד. אף־על־פי־כן, המשוב שלכם חשוב מאוד! הדיונים עשויים לחשוף סיבות לעשות דברים בצורה שונה מזו שהוצעה כאן, והם יכולים לעזור לקבל החלטות חשובות, כמו אילו הרשאות נוספות ייכללו בקבוצת המשתמשים החדשה. זאת ועוד, הדיונים יכולים לסייע לקהילות לשלב את שינוי התוכנה הזה במדיניות ובנהלים שלהן.
האם השינוי ייעשה כתגובה למאורעות האחרונים?
לא. אנו מקווים שהמאורעות האחרונים הבהירו את חשיבות השינוי, אך הרעיון נידון במשך שנים, והתיקון הספציפי הזה, שבו עוסק המסמך הנ"ל, נכתב במרץ.
גם אם השינוי יבוצע, למפעילי המערכת עדיין תהיינה דרכים להפיץ שינויים ב־JS של האתר.
זוהי בעיה טכנית קשה שבסופו של דבר תיפתר. על כל פנים, היכולת של מפעילי המערכת לערוך קובצי JS תוגבל, כך שהם לא יוכלו לעשות זאת מבלי להשתמש בשיטות מעורפלות ולא־מאוד־ידועות. דבר זה יצמצם משמעותית את אפשרויות התקיפה, ויהיה הרבה יותר קל לעקוב אחרי הפרצות שתיוותרנה.
מדוע אתם מתייחסים לעריכת CSS באותו האופן שבו אתם מתייחסים לעריכת JS?
בעוד ש־CSS פחות מסוכן מ־JS, עדיין יכולים להיות נזקים בעריכתו:
  • מאפייני CSS הקשורים בתמונות יכולים להיות מנוצלים לרעה כדי לבטל את האנונימיות של העורכים.
  • במספר דפדפנים ישנים ניתן להטמיע קוד JavaScript בתוך CSS.
  • ניתן להשתמש ב־CSS כדי לגנוב אסימוני עריכה (ובכך לבצע עריכות בשמו של משתמש אחר ועם הרשאותיו), אם כי כרגע היכולת הזו מוגבלת בשל היעדר תמיכה בדפדפנים.
  • אפשר להקים מתקפות חטיפת סמן מבוססות CSS כדי לבצע התקפות דיוג.
הנתונים מראים[2] שכמעט כל מפעילי המערכת שעורכים דפי CSS בעקביות עורכים גם דפי JS, ולכן אין סיבה להתייחס לשתי הבעיות בנפרד.
ייתכן שבעתיד ניתן יהיה לערוך חלק מגיליונות CSS באופן ובטוח; ניתן לעקוב אחרי הפרויקט TemplateStyles כדי לראות את התקדמות בתהליך.
האם השינוי ישפיע גם על דפי .css של ההרחבה TemplateStyles?
לא, הוא ישפיע רק על דפי CSS במרחב השם "מדיה ויקי". קוד CSS של ההרחבה TemplateStyles נבדק באופן אוטומטי כדי לוודא שהוא לא משמש לשום דבר מסוכן.
למה לא למנוע ממשתמשים עם הרשאה לעריכת דפי JavaScript לעשות דברים מסוכנים באופן אוטומטי במקום זאת?
אומנם יש התקדמות בתחום הזה (למשל CSP ומנגנון מסוים של סקירת עריכות), אך לעולם לא ניתן יהיה למנוע מתקפות לחלוטין – אין אפשרות לסנן שפת תכנות בצורה כזו. בכל מקרה, מנגנון כזה הרבה יותר מסובך ודורש הרבה יותר זמן. בטווח הקצר, הקטנת מספר החשבונות שיכולים לערוך דפי JavaScript היא כרגע האפשרות המעשית ביותר; בטווח הארוך, מנגנון כזה עדיין אמור לפעול לצד האחרים.
מה לגבי ההרשאות editusercss ו־edituserjs?
ההרשאות האלו מאפשרות לערוך דפי CSS/JS אישיים של משתמש אחר (הן כמעט לא ידועות ונמצאות בשימוש לעיתים רחוקות מאוד). מאחר שעריכות כאלו מאפשרות לגנוב את החשבון של המשתמש, אותם השיקולים חלים לגבי ההרשאות הנ"ל, והן יוגבלו באותו האופן. (בטווח הארוך, ראו T197087.)
מה לגבי ההרשאה החדשה editsitejson?
מדובר על עריכת דפי .json במרחב השם "מדיה ויקי" (לאחרונה התוכנה למדה להשתמש בדפים כאלה כהגדרות תצורה לגאדג'טים ולבוטים). JSON הוא אוסף נתונים, לא קוד, ולכן עריכתו לא נחשבת מסוכנת ומפעילי מערכת עדיין יוכלו לעשות זאת; גאדג'טים אמורים להיכתב בצורה שאם תוקף משתלט על דפי ה־.json – הוא לא יוכל להזיק בצורה משמעותית.

הערות שוליים

  1. בחמשת אתרי הוויקי הגדולים ביותר, 75% ממפעילי המערכת מעולם לא ערכו דפי CSS/JS;‏ 92% ממפעילי המערכת עשו זאת לעיתים נדירות מאוד.
  2. https://phabricator.wikimedia.org/T190015#4193983