У меня такое чувство, что это, вероятно, не проблема. Вероятно, это требуется средой выполнения для поддержки динамического поведения.
Существует проблема безопасности с областями памяти, которые доступны как для записи, так и для выполнения. Это позволяет злоумышленнику заполнить буфер шеллкодом , а затем выполнить этот код. Заполнение буфера шеллкодом не имеет большого значения, это просто данные. Проблема возникает, когда злоумышленник может контролировать указатель инструкций (EIP), обычно путем повреждения фрейма стека функции с использованием переполнения буфера, основанного на стеке, а затем изменения потока выполнения путем присвоения этого указателя адресу шелл-кода (или где-то в сани NOP, который ударит шеллкод).
Если вы хотите лучше понять эту меру безопасности, то посмотрите, какие переполнения буфера используются до появления бита NX. Вы должны прочитать классическую статью, Разбивая стек для удовольствия и прибыли . Имейте в виду, что ни одна из этих атак больше не работает из-за бита NX, ASLR и канареек.