@@ -976,6 +976,34 @@ def test_combination_of_svg_and_style_with_img_payload_2
976
976
assert_includes ( acceptable_results , actual )
977
977
end
978
978
979
+ def test_combination_of_svg_and_style_with_escaped_img_payload
980
+ # https://hackerone.com/reports/2503220
981
+ input , tags = "<svg><style><img src onerror=alert(1)>" , [ "svg" , "style" ]
982
+ actual = safe_list_sanitize ( input , tags : tags )
983
+ acceptable_results = [
984
+ # libxml2
985
+ "<svg><style>&lt;img src onerror=alert(1)></style></svg>" ,
986
+ # libgumbo
987
+ "<svg><style><img src onerror=alert(1)></style></svg>" ,
988
+ ]
989
+
990
+ assert_includes ( acceptable_results , actual )
991
+ end
992
+
993
+ def test_combination_of_math_and_style_with_escaped_img_payload
994
+ # https://hackerone.com/reports/2503220
995
+ input , tags = "<math><style><img src onerror=alert(1)>" , [ "math" , "style" ]
996
+ actual = safe_list_sanitize ( input , tags : tags )
997
+ acceptable_results = [
998
+ # libxml2
999
+ "<math><style>&lt;img src onerror=alert(1)></style></math>" ,
1000
+ # libgumbo
1001
+ "<math><style><img src onerror=alert(1)></style></math>" ,
1002
+ ]
1003
+
1004
+ assert_includes ( acceptable_results , actual )
1005
+ end
1006
+
979
1007
def test_should_sanitize_illegal_style_properties
980
1008
raw = %(display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;)
981
1009
expected = %(display:block;width:100%;height:100%;background-color:black;background-x:center;background-y:center;)
@@ -1075,5 +1103,15 @@ class HTML4SafeListSanitizerTest < Minitest::Test
1075
1103
class HTML5SafeListSanitizerTest < Minitest ::Test
1076
1104
@module_under_test = Rails ::HTML5
1077
1105
include SafeListSanitizerTest
1106
+
1107
+ def test_should_not_be_vulnerable_to_nokogiri_foreign_style_serialization_bug
1108
+ # https://hackerone.com/reports/2503220
1109
+ input = "<svg><style><img src onerror=alert(1)>"
1110
+ result = Rails ::HTML5 ::SafeListSanitizer . new . sanitize ( input , tags : [ "svg" , "style" ] )
1111
+ browser = Nokogiri ::HTML5 ::Document . parse ( result )
1112
+ xss = browser . at_xpath ( "//img/@onerror" )
1113
+
1114
+ assert_nil ( xss )
1115
+ end
1078
1116
end if loofah_html5_support?
1079
1117
end
0 commit comments