Ruby's safe mode uniemożliwia korzystanie ze skażonych danych przez potencjalnie niebezpieczne operacje. Różni się poziomami, 0 jest wyłączone, a następnie 1-4 poziomami bezpieczeństwa. Jakie luki są możliwe, gdy włączony jest tryb bezpieczny? Czy znasz jakieś numery CVE wydane dla programu ruby, gdy włączony jest tryb bezpieczny? Co CWE Violations (lub rodziny cwe) są możliwe przy włączonym trybie awaryjnym?
Odpowiedz
Wszystkie luki w poziomie aplikacji nie mają wpływu na poziom $ SAFE. Ataki wtrysku, które nie przechodzą przez "niebezpieczną operację", jak na przykład cross-site scripting i SQL injection. Obejmuje to mniej więcej wszystkie klasy luk w zabezpieczeniach aplikacji internetowych, z wyjątkiem być może lokalnego i zdalnego włączania plików. Zobacz OWASP Top 10, $ SAFE nie pomaga w wielu z nich.
Poziom $ SAFE chroni jednak nieco przed lukami na poziomie systemu. Jeśli atakujący jest w stanie napisać kod Ruby do pliku w/tmp, nie będzie wtedy w stanie oszukać twojego programu do załadowania tego kodu, jeśli $ SAFE> = 2.
I to oczywiście nie obejmuje wszelkie luki w zabezpieczeniach z samą Ruby. Są one znacznie poważniejsze i mogą całkowicie ominąć $ SAFE.
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-3657
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-3655
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-3694
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2005-2337
lub zwykły stary przepełnienia bufora, etc przepełnienia całkowitą, w sam interpreter Ruby, które nie mają nic wspólnego z $ SAFE.
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-2489
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-4124
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-2726
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-2376
Rails ma historię luki występujące czy $ SAFE jest włączony czy nie.Jest to skomplikowane ze względu na fakt, że dane wejściowe użytkownika są przechowywane w aplikacjach Rails, a złośliwe dane mogą pojawiać się ponownie w późniejszym czasie.
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-4214
- http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3009
raporty Luka w zabezpieczeniach aplikacji Ruby inne niż Rails i MRI są trudne do zdobycia.
Kolejny duży problem z $ BEZPIECZNY jest brak prawdziwej listy (o której mi wiadomo), która określa dokładnie, co $ SAFE robi i nie chroni. Jedyna rzecz, jaką możesz zrobić, to wyszukać ruby_safe_level w eval.c (jest to starszy plik eval.c z wersji 1.8.4). Komentarze podają ten opis, ale jest on dość niejasny.
/* safe-level:
0 - strings from streams/environment/ARGV are tainted (default)
1 - no dangerous operation by tainted value
2 - process/file operations prohibited
3 - all generated objects are tainted
4 - no global (non-tainted) variable modification/no direct output
*/
Domyślam się, że próbuję powiedzieć, że $ BEZPIECZNY to bezpieczeństwo systemu. Wykonuje dobrą pracę, ale nie ma prawdziwego sposobu, aby dokładnie wiedzieć, co jest i nie jest chronione. Nie powinna to być twoja jedyna linia obrony, to raczej sieć bezpieczeństwa, więc nic nie prześlizgnie się przez "niebezpieczną operację". Z drugiej strony nie ma nic wspólnego z bezpieczeństwem aplikacji i nie chroni twoich danych ani użytkowników przed włamaniem. Co więcej, MRI ma historię luk w zabezpieczeniach, które całkowicie ominęły $ SAFE.
Od $SAFE >= 1
chroni tylko ty tworząc za pomocą wejścia skażoną w niebezpiecznych operacji, takich jak eval
i tak dalej, każda luka w bezpieczny metody Ruby nadal będzie problemem. Na przykład: CVE-2009-4124 wymaga tylko, aby użyć funkcji ljust
//center
/rjust
na wejściu, a przynajmniej moja wersja ruby
1.8.7 uważa te funkcje za bezpieczne. Oto fragment, który wykorzystuje $SAFE = 4
Ruby, a na pewno byłoby narażone powyższego problemu:
$SAFE = 4; ARGV[0].ljust(ARGV[1].to_i)
Ogólnie, większość luk Ruby nadal może być kierowane nawet jeśli skrypt Ruby pracuje w trybie awaryjnym.
Również z $SAFE = 1
, wy can untaint
zmienne, a więc aplikacja jest podatny jak najszybciej untaint
i następnie używać tej zmiennej w non-bezpieczny sposób, aplikacja jest wciąż zagrożone.
+1 świetny punkt, każda funkcja może być pochłaniaczem, jeśli cierpi z powodu uszkodzenia pamięci w języku lub w bibliotece. – rook
- 1. Jakie są kluczowe luki podczas pracy z odpowiedziami Json?
- 2. Jakie są możliwe wartości deskryptorów plików?
- 3. Jakie funkcje Lisp są obecne w Ruby?
- 4. Jakie luki dotyczą atakującego wysyłającego "php: // input"?
- 5. Jakie narzędzia są dostępne dla refaktoryzacji Ruby?
- 6. Jakie są możliwe wektory ataku dla odbitych skryptów cross site?
- 7. Jakie są możliwe wartości funkcji System.Info "os" w Haskell?
- 8. Jakie są możliwe scenariusze użycia dla cech w PHP?
- 9. Jakie są możliwe przyrostki po nazwie zmiennej w VBA?
- 10. Jakie są wartości różnic (1 2 3) w google_conversion_format?
- 11. Jakie są główne zmiany w składni Ruby 1.9?
- 12. Jakie są najlepsze praktyki dotyczące używania wymagania w Ruby?
- 13. Jakie możliwe wartości przyjmuje datetime.strptime() dla% Z?
- 14. Ruby: Co oznacza 1 $?
- 15. WiX SetProperty - Jakie są możliwe wartości atrybutów Przed/Po
- 16. Jakie są możliwe przyczyny "sprawdzania poprawności błędów" Facebooka?
- 17. Jakie są negatywne konsekwencje wyłączenia sterty debugowania? (_NO_DEBUG_HEAP == 1)
- 18. Jakie jest zachowanie wpisywania {a: 1} z podaniem 1, a {a: 1, b: 2} z powodu błędu w konsoli JavaScript?
- 19. Jakie są dobre wyskakujące okna dialogowe dla Ruby on Rails?
- 20. Co to są próbki cieni w OpenGL i jakie są możliwe zastosowania dla nich?
- 21. Jakie są zalety używania Ruby NArray over Array?
- 22. Jakie są duże różnice między wtyczką IntelliJ + Ruby a RubyMine?
- 23. Co to jest $ _ [0], $ _ [1] w Ruby?
- 24. Czy są jakieś luki w rozwiązywaniu kolistych problemów referencyjnych?
- 25. Jakie są korzyści z curry?
- 26. Publikowanie obrazu z luki API
- 27. Czy exploity przepełnienia bufora są możliwe w języku C#?
- 28. Jakie są alternatywy Wordpress dla Ruby on Rails?
- 29. Jakie są zalety VistaDB
- 30. Jakie są poziomy DOM?
Czekaj, myślałem, że PHP był jedynym, na który wpłynął zdalny plik. Czy ruby nie akceptują adresu URL? Czy masz jakieś linki dotyczące ataków rubinowych LFI/RFI? – rook
Ruby nie jest tak naprawdę wrażliwa na RFI, o ile wiem. Jeśli jednak masz otwartą bibliotekę uri, każde otwarcie może potencjalnie otworzyć URL. Nie wpłynie to na wymaganie ani obciążenie (użyte do załadowania kodu Ruby), ale może potencjalnie wpłynąć na wszystko, co spowoduje otwarcie pliku. Chociaż warunki, w których może się to zdarzyć, są ograniczone, ponieważ musi być użyte jądro # open zamiast "File # open" (zwykle idiom do otwierania plików). Jest tak samo podatna na LFI, że ktoś jest na tyle głupi, aby wprowadzić dane użytkownika do ładunku lub wymagać oświadczenia. $ SAFE powinno to złapać. – AboutRuby
Kernel # open ma inne luki, które nie są od razu oczywiste. Na przykład, jeśli pierwszy znak jest potokiem, otworzy on podproces i użyje jego wyjścia jako strumienia plików. – AboutRuby