Skip to content

Commit 66ba2b0

Browse files
committed
Land rapid7#7567, fix apk injection when template has no permissions
2 parents c0af5b6 + 927e195 commit 66ba2b0

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

lib/msf/core/payload/apk.rb

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,25 +75,31 @@ def fix_manifest(tempdir)
7575
original_manifest = parse_manifest("#{tempdir}/original/AndroidManifest.xml")
7676
original_permissions = original_manifest.xpath("//manifest/uses-permission")
7777

78-
manifest = original_manifest.xpath('/manifest')
7978
old_permissions = []
80-
for permission in original_permissions
79+
original_permissions.each do |permission|
8180
name = permission.attribute("name").to_s
8281
old_permissions << name
8382
end
84-
for permission in payload_permissions
83+
84+
application = original_manifest.xpath('//manifest/application')
85+
payload_permissions.each do |permission|
8586
name = permission.attribute("name").to_s
8687
unless old_permissions.include?(name)
8788
print_status("Adding #{name}")
88-
original_permissions.before(permission.to_xml)
89+
if original_permissions.empty?
90+
application.before(permission.to_xml)
91+
original_permissions = original_manifest.xpath("//manifest/uses-permission")
92+
else
93+
original_permissions.before(permission.to_xml)
94+
end
8995
end
9096
end
9197

9298
application = original_manifest.at_xpath('/manifest/application')
9399
application << payload_manifest.at_xpath('/manifest/application/receiver').to_xml
94100
application << payload_manifest.at_xpath('/manifest/application/service').to_xml
95101

96-
File.open("#{tempdir}/original/AndroidManifest.xml", "wb") {|file| file.puts original_manifest.to_xml }
102+
File.open("#{tempdir}/original/AndroidManifest.xml", "wb") { |file| file.puts original_manifest.to_xml }
97103
end
98104

99105
def parse_orig_cert_data(orig_apkfile)

0 commit comments

Comments
 (0)