Как Google забуксовал: История о том, как ошибка в коде привела к глобальному сбою

14 июня 2025 г.

Вступление

Мировая информатика полна удивительных историй о том, как маленькие ошибки могут привести к большим проблемам. Один из таких случаев произошел в Google в 2025 году, когда новая функция управления сервисами привела к глобальному сбою. Давайте разберемся, что именно пошло не так и как это могло бы быть предотвращено.

Пересказ Reddit поста

29 мая 2025 года в Google была введена новая функция управления сервисами, которая отвечала за проверки политики квот. Однако эта функция не имела адекватной обработки ошибок и не была защищена флагом функции. 12 июня 2025 года в систему была вставлена политика с пустыми полями, которые мгновенно реплицировались по всему миру. Пустые поля вызвали ошибку нулевого указателя, что привело к зацикливанию бинарных файлов и их сбою.

Суть проблемы и хакерский подход

Основная проблема заключалась в том, что новая функция управления сервисами не была должным образом протестирована и не имела механизмов обработки ошибок. Это привело к тому, что пустые поля в политике вызвали ошибку нулевого указателя, которая, в свою очередь, привела к зацикливанию бинарных файлов. Такие ситуации часто возникают, когда разработчики не учитывают все возможные сценарии и не тестируют код на наличие ошибок.

Детальный разбор проблемы

Недостатки в коде

Основная проблема заключалась в том, что новая функция управления сервисами не была должным образом протестирована и не имела механизмов обработки ошибок. Это привело к тому, что пустые поля в политике вызвали ошибку нулевого указателя, которая, в свою очередь, привела к зацикливанию бинарных файлов. Такие ситуации часто возникают, когда разработчики не учитывают все возможные сценарии и не тестируют код на наличие ошибок.

Отсутствие защиты флагов

Функция не была защищена флагом, что означает, что она могла быть случайно включена или активирована без необходимых проверок. Это увеличило риск того, что ошибка в коде приведет к глобальному сбою.

Репликация пустых полей

Пустые поля в политике были реплицированы по всему миру за считанные секунды, что привело к мгновенному распространению ошибки. Это подчеркивает важность проверки данных перед их репликацией и необходимость введения механизмов валидации.

Практические примеры и кейсы

Пример сбоя в другой системе

Подобные сбои происходят не только в Google. В 2017 году сбой в AWS привел к значительным проблемам для многих компаний, использующих их сервисы. Ошибка в коде привела к потере данных и временной недоступности сервисов.


# Пример кода, который может привести к ошибке нулевого указателя
def process_policy(policy):
    # Предположим, что policy может быть None или иметь пустые поля
    if not policy:
        return "Error: Invalid policy"

    # Обработка политики
    for field in policy:
        if field is None:
            return "Error: Null field detected"
        # Обработка каждого поля
        print(f"Processing field: {field}")

# Пример вызова функции с некорректной политикой
policy_example = None
result = process_policy(policy_example)
print(result)

Экспертные мнения из комментариев

Комментарии пользователей Reddit

Автор: illuminatedtiger

Но тот, кто сделал это, точно знает, как инвертировать BST.

Автор: saantonandre

Думаю, их новые инженеры запросто могли запросить "джемини" наобум.

Автор: venktesh

Статистика показывает, что иногда дыры в программе совпадают, и она остается незамеченной, не протестированной, не проверенной в стадии разработки и так далее. Это факт жизни для программного обеспечения, которое не прошло формальную проверку. Часть меня хочет сказать, что язык без nulls/nils, наверное, не...

Автор: aloha2436

Ошибка, которая произошла, не удивила меня. Иногда дыры в нашей системе безопасности совпадают, и программа остается незамеченной, непроверенной, не протестированной в стадии разработки и так далее. Это факт жизни для программного обеспечения, которое не прошло формальную проверку.

Возможные решения и рекомендации

Проверка данных перед репликацией

Одним из основных решений является введение проверки данных перед их репликацией. Это поможет избежать ситуаций, когда пустые поля или некорректные данные распространяются по всей системе.

Обработка ошибок

Важно вводить механизмы обработки ошибок, которые смогут эффективно справляться с различными сценариями и предотвращать сбои. Это может включать в себя логирование ошибок, уведомления администраторов и автоматическую корректировку данных.

Использование флагов

Защита функций флагом позволяет контролировать их активацию и деактивацию, что уменьшает риск случайного включения неготовой функции.

Тестирование и валидация

Регулярное тестирование и валидация кода на всех этапах разработки помогут выявить и исправить ошибки до того, как они приведут к глобальным сбоям.

Заключение и прогноз развития

История с Google показывает, что даже крупные компании могут столкнуться с серьезными проблемами из-за ошибок в коде. Важно учитывать все возможные сценарии, вводить механизмы обработки ошибок и регулярно тестировать код. В будущем, возможно, мы увидим больше внимания к вопросам безопасности и надежности программного обеспечения, особенно в контексте глобальных систем.


# Пример кода с обработкой ошибок и проверкой данных
def process_policy_safely(policy):
    """Обрабатывает политику с проверкой данных и обработкой ошибок.

    Args:
        policy: Политика, которую нужно обработать

    Returns:
        str: Результат обработки или сообщение об ошибке
    """
    # Проверка, что политика не является None
    if policy is None:
        return "Error: Policy is None"

    # Проверка, что все поля в политике не являются None
    for field in policy:
        if field is None:
            return "Error: Null field detected"

    # Обработка политики
    for field in policy:
        print(f"Processing field: {field}")

    return "Policy processed successfully"

# Пример вызова функции с корректной политикой
policy_example = ["field1", "field2", "field3"]
result = process_policy_safely(policy_example)
print(result)

# Пример вызова функции с некорректной политикой
policy_example_invalid = ["field1", None, "field3"]
result_invalid = process_policy_safely(policy_example_invalid)
print(result_invalid)

Этот код демонстрирует, как можно обрабатывать политику с проверкой данных и обработкой ошибок, чтобы избежать сбоев и ошибок нулевого указателя.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE