1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "common_fuzzer.h"
17
18 #include <system_ability_definition.h>
19
20 #define protected public
21 #define private public
22 #include "enterprise_device_mgr_ability.h"
23 #undef protected
24 #undef private
25 #ifdef OS_ACCOUNT_EDM_ENABLE
26 #include "add_os_account_plugin.h"
27 #endif
28 #include "allowed_bluetooth_devices_plugin.h"
29 #include "allowed_install_bundles_plugin.h"
30 #include "allowed_usb_devices_plugin.h"
31 #include "disable_bluetooth_plugin.h"
32 #include "disable_hdc_plugin.h"
33 #include "disable_microphone_plugin.h"
34 #include "disable_printer_plugin.h"
35 #include "disable_usb_plugin.h"
36 #include "disabled_network_interface_plugin.h"
37 #ifdef OS_ACCOUNT_EDM_ENABLE
38 #include "disallow_add_local_account_plugin.h"
39 #include "disallow_add_os_account_by_user_plugin.h"
40 #endif
41 #include "disallow_modify_datetime_plugin.h"
42 #include "disallowed_install_bundles_plugin.h"
43 #include "disallowed_running_bundles_plugin.h"
44 #include "disallowed_uninstall_bundles_plugin.h"
45 #include "domain_filter_rule_plugin.h"
46 #include "fingerprint_auth_plugin.h"
47 #include "firewall_rule_plugin.h"
48 #include "func_code.h"
49 #include "get_all_network_interfaces_plugin.h"
50 #include "get_bluetooth_info_plugin.h"
51 #include "get_device_encryption_status_plugin.h"
52 #include "get_device_info_plugin.h"
53 #include "get_display_version_plugin.h"
54 #include "get_ip_address_plugin.h"
55 #include "get_mac_plugin.h"
56 #include "get_security_patch_tag_plugin.h"
57 #include "global_proxy_plugin.h"
58 #include "ienterprise_device_mgr.h"
59 #include "install_plugin.h"
60 #include "iptables_rule_plugin.h"
61 #include "is_wifi_active_plugin.h"
62 #include "location_policy_plugin.h"
63 #include "lock_screen_plugin.h"
64 #include "manage_auto_start_apps_plugin.h"
65 #include "ntp_server_plugin.h"
66 #include "operate_device_plugin.h"
67 #include "password_policy_plugin.h"
68 #include "power_policy_plugin.h"
69 #include "reset_factory_plugin.h"
70 #include "screen_off_time_plugin.h"
71 #include "set_browser_policies_plugin.h"
72 #include "set_wifi_disabled_plugin.h"
73 #include "set_wifi_profile_plugin.h"
74 #include "uninstall_plugin.h"
75 #include "usb_read_only_plugin.h"
76 #include "user_cert_plugin.h"
77 #include "utils.h"
78
79 namespace OHOS {
80 namespace EDM {
81 constexpr int32_t NUM_24 = 24;
82 constexpr int32_t NUM_16 = 16;
83 constexpr int32_t NUM_8 = 8;
84 constexpr int32_t NUM_INDEX_ZERO = 0;
85 constexpr int32_t NUM_INDEX_FIRST = 1;
86 constexpr int32_t NUM_INDEX_SECOND = 2;
87 constexpr int32_t NUM_INDEX_THIRD = 3;
88 constexpr int32_t BYTE_SIZE = 8;
89 constexpr int32_t MAX_STRING_SIZE = 1024;
90 #ifdef OS_ACCOUNT_EDM_ENABLE
91 const bool REGISTER_ADD_OS_ACCOUNT_PLUGIN = PluginManager::GetInstance()->AddPlugin(AddOsAccountPlugin::GetPlugin());
92 #endif
93 const bool REGISTER_ALLOWED_BLUETOOTH_DEVICES_PLUGIN =
94 PluginManager::GetInstance()->AddPlugin(AllowedBluetoothDevicesPlugin::GetPlugin());
95 const bool REGISTER_ALLOWED_INSTALL_BUNDLES_PLUGIN =
96 PluginManager::GetInstance()->AddPlugin(AllowedInstallBundlesPlugin::GetPlugin());
97 const bool REGISTER_ALLOW_USB_DEVICES_PLUGIN =
98 PluginManager::GetInstance()->AddPlugin(AllowUsbDevicesPlugin::GetPlugin());
99 const bool REGISTER_DISABLE_BLUETOOTH_PLUGIN =
100 PluginManager::GetInstance()->AddPlugin(DisableBluetoothPlugin::GetPlugin());
101 const bool REGISTER_DISABLE_HDC_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableHdcPlugin::GetPlugin());
102 const bool REGISTER_DISABLE_MICROPHONE_PLUGIN =
103 PluginManager::GetInstance()->AddPlugin(DisableMicrophonePlugin::GetPlugin());
104 const bool REGISTER_DISABLE_PRINTER_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisablePrinterPlugin::GetPlugin());
105 const bool REGISTER_DISABLE_USB_PLUGIN = PluginManager::GetInstance()->AddPlugin(DisableUsbPlugin::GetPlugin());
106 const bool REGISTER_DISABLED_NETWORK_INTERFACE_PLUGIN =
107 PluginManager::GetInstance()->AddPlugin(DisabledNetworkInterfacePlugin::GetPlugin());
108 #ifdef OS_ACCOUNT_EDM_ENABLE
109 const bool REGISTER_DISALLOW_ADD_LOCAL_ACCOUNT_PLUGIN =
110 PluginManager::GetInstance()->AddPlugin(DisallowAddLocalAccountPlugin::GetPlugin());
111 const bool REGISTER_DISALLOW_ADD_OS_ACCOUNT_BY_USER_PLUGIN =
112 PluginManager::GetInstance()->AddPlugin(DisallowAddOsAccountByUserPlugin::GetPlugin());
113 #endif
114 const bool REGISTER_DISALL_MODIFY_DATE_TIME_PLUGIN =
115 PluginManager::GetInstance()->AddPlugin(DisallModifyDateTimePlugin::GetPlugin());
116 const bool REGISTER_DISALLOWED_INSTALL_BUNDLES_PLUGIN =
117 PluginManager::GetInstance()->AddPlugin(DisallowedInstallBundlesPlugin::GetPlugin());
118 const bool REGISTER_DISALLOWED_RUNNING_BUNDLES_PLUGIN =
119 PluginManager::GetInstance()->AddPlugin(DisallowedRunningBundlesPlugin::GetPlugin());
120 const bool REGISTER_DISALLOWED_UNINSTALL_BUNDLES_PLUGIN =
121 PluginManager::GetInstance()->AddPlugin(DisallowedUninstallBundlesPlugin::GetPlugin());
122 const bool REGISTER_DOMAIN_FILTER_RULE_PLUGIN =
123 PluginManager::GetInstance()->AddPlugin(DomainFilterRulePlugin::GetPlugin());
124 const bool REGISTER_FINGER_PRINT_AUTH_PLUGIN =
125 PluginManager::GetInstance()->AddPlugin(FingerprintAuthPlugin::GetPlugin());
126 const bool REGISTER_FIREWALL_RULE_PLUGIN = PluginManager::GetInstance()->AddPlugin(FirewallRulePlugin::GetPlugin());
127 const bool REGISTER_GET_ALL_NETWORK_INTERFACES_PLUGIN =
128 PluginManager::GetInstance()->AddPlugin(GetAllNetworkInterfacesPlugin::GetPlugin());
129 const bool REGISTER_GET_BLUETOOTH_INFO_PLUGIN =
130 PluginManager::GetInstance()->AddPlugin(GetBluetoothInfoPlugin::GetPlugin());
131 const bool REGISTER_GET_DEVICE_ENCRYPTION_STATUS_PLUGIN =
132 PluginManager::GetInstance()->AddPlugin(GetDeviceEncryptionStatusPlugin::GetPlugin());
133 const bool REGISTER_GET_DEVICE_INFO_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetDeviceInfoPlugin::GetPlugin());
134 const bool REGISTER_GET_DISPLAY_VERSION_PLUGIN =
135 PluginManager::GetInstance()->AddPlugin(GetDisplayVersionPlugin::GetPlugin());
136 const bool REGISTER_GET_IP_ADDRESS_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetIpAddressPlugin::GetPlugin());
137 const bool REGISTER_GET_MAC_PLUGIN = PluginManager::GetInstance()->AddPlugin(GetMacPlugin::GetPlugin());
138 const bool REGISTER_GET_SECURITY_PATCH_TAG_PLUGIN =
139 PluginManager::GetInstance()->AddPlugin(GetSecurityPatchTagPlugin::GetPlugin());
140 const bool REGISTER_GLOBAL_PROXY_PLUGIN = PluginManager::GetInstance()->AddPlugin(GlobalProxyPlugin::GetPlugin());
141 const bool REGISTER_INSTALL_PLUGIN = PluginManager::GetInstance()->AddPlugin(InstallPlugin::GetPlugin());
142 const bool REGISTER_IPTABLES_RULE_PLUGIN =
143 PluginManager::GetInstance()->AddPlugin(std::make_shared<IptablesRulePlugin>());
144 const bool REGISTER_IS_WIFI_ACTIVE_PLUGIN = PluginManager::GetInstance()->AddPlugin(IsWifiActivePlugin::GetPlugin());
145 const bool REGISTER_LOCATION_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(LocationPolicyPlugin::GetPlugin());
146 const bool REGISTER_LOCK_SCREEN_PLUGIN = PluginManager::GetInstance()->AddPlugin(LockScreenPlugin::GetPlugin());
147 const bool REGISTER_MANAGE_AUTO_START_APPS_PLUGIN =
148 PluginManager::GetInstance()->AddPlugin(ManageAutoStartAppsPlugin::GetPlugin());
149 const bool REGISTER_NTP_SERVER_PLUGIN = PluginManager::GetInstance()->AddPlugin(NTPServerPlugin::GetPlugin());
150 const bool REGISTER_OPERATE_DEVICE_PLUGIN = PluginManager::GetInstance()->AddPlugin(OperateDevicePlugin::GetPlugin());
151 const bool REGISTER_PASSWORD_POLICY_PLUGIN = PluginManager::GetInstance()->AddPlugin(PasswordPolicyPlugin::GetPlugin());
152 const bool REGISTER_POWER_POLICY_PLUGIN =
153 PluginManager::GetInstance()->AddPlugin(std::make_shared<PowerPolicyPlugin>());
154 const bool REGISTER_RESET_FACTORY_PLUGIN = PluginManager::GetInstance()->AddPlugin(ResetFactoryPlugin::GetPlugin());
155 const bool REGISTER_SCREEN_OFF_TIME_PLUGIN = PluginManager::GetInstance()->AddPlugin(ScreenOffTimePlugin::GetPlugin());
156 const bool REGISTER_SET_BROWSER_POLICIES_PLUGIN =
157 PluginManager::GetInstance()->AddPlugin(std::make_shared<SetBrowserPoliciesPlugin>());
158 const bool REGISTER_SET_WIFI_DISABLED_PLUGIN =
159 PluginManager::GetInstance()->AddPlugin(SetWifiDisabledPlugin::GetPlugin());
160 const bool REGISTER_SET_WIFI_PROFILE_PLUGIN =
161 PluginManager::GetInstance()->AddPlugin(SetWifiProfilePlugin::GetPlugin());
162 const bool REGISTER_UNINSTALL_PLUGIN = PluginManager::GetInstance()->AddPlugin(UninstallPlugin::GetPlugin());
163 const bool REGISTER_USB_READ_ONLY_PLUGIN =
164 PluginManager::GetInstance()->AddPlugin(std::make_shared<UsbReadOnlyPlugin>());
165 const bool REGISTER_USER_CERT_PLUGIN = PluginManager::GetInstance()->AddPlugin(std::make_shared<UserCertPlugin>());
166
OnRemoteRequestFuzzerTest(uint32_t code,const uint8_t * data,size_t size,MessageParcel & parcel)167 void CommonFuzzer::OnRemoteRequestFuzzerTest(uint32_t code, const uint8_t* data, size_t size, MessageParcel& parcel)
168 {
169 TEST::Utils::SetEdmInitialEnv();
170 sptr<EnterpriseDeviceMgrAbility> enterpriseDeviceMgrAbility = EnterpriseDeviceMgrAbility::GetInstance();
171 enterpriseDeviceMgrAbility->OnStart();
172
173 MessageParcel reply;
174 MessageOption option;
175
176 enterpriseDeviceMgrAbility->OnRemoteRequest(code, parcel, reply, option);
177 TEST::Utils::ResetTokenTypeAndUid();
178 }
179
SetParcelContent(MessageParcel & parcel,const uint8_t * data,size_t size)180 void CommonFuzzer::SetParcelContent(MessageParcel& parcel, const uint8_t* data, size_t size)
181 {
182 AppExecFwk::ElementName admin;
183 admin.SetBundleName("com.example.edmtest");
184 admin.SetAbilityName("com.example.edmtest.EnterpriseAdminAbility");
185 parcel.WriteInterfaceToken(IEnterpriseDeviceMgr::GetDescriptor());
186 parcel.WriteParcelable(&admin);
187 parcel.WriteBuffer(data, size);
188 }
189
GetU32Data(const uint8_t * ptr)190 uint32_t CommonFuzzer::GetU32Data(const uint8_t* ptr)
191 {
192 return (ptr[NUM_INDEX_ZERO] << NUM_24) | (ptr[NUM_INDEX_FIRST] << NUM_16) | (ptr[NUM_INDEX_SECOND] << NUM_8) |
193 ptr[NUM_INDEX_THIRD];
194 }
195
GetU32Data(const uint8_t * ptr,int32_t & pos,size_t size)196 int32_t CommonFuzzer::GetU32Data(const uint8_t* ptr, int32_t& pos, size_t size)
197 {
198 if (size <= pos || size - pos < sizeof(int32_t)) {
199 return 0;
200 }
201 int32_t ret = 0;
202 pos += sizeof(int32_t);
203 for (int i = 0; i < sizeof(int32_t); i++) {
204 ret |= ((int32_t)ptr[i] << (BYTE_SIZE * i));
205 }
206 return ret;
207 }
208
GetLong(const uint8_t * ptr,int32_t & pos,size_t size)209 long CommonFuzzer::GetLong(const uint8_t* ptr, int32_t& pos, size_t size)
210 {
211 if (size <= pos || size - pos < sizeof(long)) {
212 return 0;
213 }
214 long ret = 0;
215 pos += sizeof(long);
216 for (int i = 0; i < sizeof(long); i++) {
217 ret |= ((long)ptr[i] << (BYTE_SIZE * i));
218 }
219 return ret;
220 }
221
GetString(const uint8_t * ptr,int32_t & pos,int32_t stringSize,size_t size)222 std::string CommonFuzzer::GetString(const uint8_t* ptr, int32_t& pos, int32_t stringSize, size_t size)
223 {
224 if (size <= pos || size - pos < stringSize) {
225 return nullptr;
226 }
227 stringSize = (stringSize > MAX_STRING_SIZE) ? MAX_STRING_SIZE : stringSize;
228 std::string ret(reinterpret_cast<const char*>(ptr + pos), stringSize);
229 pos += stringSize;
230 return ret;
231 }
232 } // namespace EDM
233 } // namespace OHOS